2012-01-11 31 views
29

Ví dụ: tôi muốn cập nhật tất cả các bản ghi thành '2012-01-01' ("thời gian": ISODate ("2011-12-31T13: 52: 40Z")).Làm cách nào để cập nhật trường ngày trong bảng điều khiển mongo?

db.test.update({ time : '2012-01-01' }, false, true ) 

lỗi lại:

Assert failed : need an object 
Error("Printing Stack Trace")@:0 
()@shell/utils.js:35 
("assert failed : need an object")@shell/utils.js:46 
(false,"need an object")@shell/utils.js:54 
([object Object],false,true)@shell/collection.js:189 
@(shell):1 

Wed Jan 11 17:52:35 uncaught exception: assert failed : need an object 
+0

lỗi là gì? –

Trả lời

47

Bạn cần phải tạo một đối tượng mới ISODate như thế này:

db.test.insert({"Time" : new ISODate("2012-01-10") }); 

Điều này đúng cả các bản cập nhật và cho các truy vấn. Lưu ý rằng cú pháp truy vấn của bạn không đúng, nó phải là

db.test.update({ criteria }, { newObj }, upsert, multi); 

Ví dụ, để cập nhật tất cả các đối tượng, xem xét

db.test.update({}, { $set : { "time" : new ISODate("2012-01-11T03:34:54Z") } }, true, true); 

Cũng lưu ý rằng đây là rất khác so với

db.test.update({}, { "time" : new ISODate("2012-01-11T03:34:54Z") }, true, false); 

vì sau này sẽ thay thế đối tượng, thay vì thêm trường mới vào tài liệu hiện có hoặc cập nhật trường hiện có. Trong ví dụ này, tôi đã thay đổi tham số cuối cùng thành false, vì nhiều bản cập nhật chỉ hoạt động với các toán tử $.

2

Nếu bạn cần phải chuyển đổi một lĩnh vực ngày hiện (nhập khẩu từ định dạng MySQL 'yyyy-mm-dd' fe) để ISODate bạn có thể lặp qua các tài liệu theo cách này:

/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});" 
2

Bạn có thể làm điều này trong theo cách cũ-trường bằng cách tạo ra ngày ISO

db.test.update({_id : 1}, { 
     $set : { 
     "time" : new ISODate("your current date") 
     } 
    }); 

Nhưng lưu ý rằng với mới Mongo 2.6 bạn sẽ có thể cập nhật ngày đến một ngày hiện tại thực sự dễ dàng với $currentDate.

db.test.update({ _id: 1 }, { 
    $currentDate: { 
     time: true, 
    }, 
}) 
Các vấn đề liên quan