2011-11-21 26 views

Trả lời

188
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}}) 

Bạn cũng có thể sử dụng NumberLong.

+0

nhưng trong findOne nó nói NumberLong (0) không phải là 0 – daydreamer

+4

Theo mặc định, trình bao mong xử lý tất cả các số dưới dạng giá trị dấu phẩy động. Vì vậy, chúng tôi cần chỉ định rõ loại số chúng tôi muốn sử dụng, ví dụ: NumberInt hoặc NumberLong. http://docs.mongodb.org/manual/core/shell-types/ – Yadu

+8

Tôi có một câu hỏi. NumberInt chỉ được cung cấp trong trình bao mongo, bạn làm thế nào trong ngôn ngữ JavaScript như node.js? – Shawyeok

-6

Vâng, đó là Javascript, vì vậy những gì bạn có trong 'giá trị' là một số, có thể là một số nguyên hoặc một phao. Nhưng thực sự không có sự khác biệt về JavaScript. Từ Learning JavaScript:

Các Số Data Type

loại Số dữ liệu trong JavaScript được dấu chấm động số, nhưng họ có thể hoặc có thể không có một thành phần phân đoạn. Nếu chúng không có dấu thập phân hoặc thành phần phân số, chúng được coi là số nguyên — số nguyên căn bản-10 trong một dải –2 đến 2 .

+20

Thực ra điều đó không đúng. Trong khi JS không thấy sự khác biệt, ngay sau khi bạn kết nối với mongo từ một ngôn ngữ khác (ví dụ: java), bạn sẽ cảm thấy rất nhiều sự khác biệt. –

+1

Ứng dụng của tôi đã bị hỏng ở các điểm khác nhau chỉ vì một lý do, int được lưu và trả lại dưới dạng float. Tôi nghi ngờ nguyên nhân phải là một số insertions hướng dẫn sử dụng tôi đã làm thông qua vỏ mongo sử dụng javascript. – Melsi

8

Một cú pháp hơi đơn giản (trong Robomongo ít nhất) làm việc cho tôi:

db.database.save({ Year : NumberInt(2015) }); 
0

Nếu kiểu giá trị đã tăng gấp đôi, sau đó cập nhật các giá trị với $ thiết lập lệnh không thể thay đổi kiểu giá trị gấp đôi để int khi sử dụng hàm NumberInt() hoặc NumberLong(). Vì vậy, để thay đổi loại giá trị, nó phải cập nhật toàn bộ bản ghi.

var re = db.data.find({"name": "zero"}) 
re['value']=NumberInt(0) 
db.data.update({"name": "zero"}, re) 
Các vấn đề liên quan