2012-01-11 56 views
29

例如,我想將所有記錄更新爲'2012-01-01'(「time」:ISODate(「2011-12-31T13:52:40Z」))。如何更新mongo控制檯中的日期字段?

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

返回錯誤:

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

什麼是錯誤? – 2012-01-11 14:50:18

回答

47

你需要創建一個新的ISODate對象是這樣的:

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

這無論是對於更新和查詢真實。請注意,您的查詢語法不正確,應該是

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

例如,要更新所有對象,考慮

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

另外請注意,這是從

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

非常不同,因爲後者將替換爲的對象,而不是向現有文檔添加新字段或更新現有字段。在本例中,我將最後一個參數更改爲false,因爲多更新僅適用於$操作員。

2

如果您需要將現有的日期字段(從MySQL格式「YYYY-MM-DD」鐵進口)到ISODate就可以通過文件循環是這樣的:

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

你可以做到這一點通過創建ISO日期

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

但是請注意,新Mongo 2.6,你將能夠以更新日期爲當前日期很容易與$currentDate老派的方式。

db.test.update({ _id: 1 }, { 
    $currentDate: { 
     time: true, 
    }, 
})