例如,我想将所有记录更新为"2012-01-01"("时间":ISODate("2011-12-31T13:52:40Z")).
db.test.update( { time : '2012-01-01' }, false, true )
Run Code Online (Sandbox Code Playgroud)
返回错误:
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
Run Code Online (Sandbox Code Playgroud)
mne*_*syn 53
您需要创建一个这样的新ISODate对象:
db.test.insert({"Time" : new ISODate("2012-01-10") });
Run Code Online (Sandbox Code Playgroud)
对于更新和查询都是如此.请注意,您的查询语法不正确,应该是
db.test.update({ criteria }, { newObj }, upsert, multi);
Run Code Online (Sandbox Code Playgroud)
例如,要更新所有对象,请考虑
db.test.update( {}, { $set : { "time" : new ISODate("2012-01-11T03:34:54Z") } }, true, true);
Run Code Online (Sandbox Code Playgroud)
另请注意,这与此非常不同
db.test.update( {}, { "time" : new ISODate("2012-01-11T03:34:54Z") }, true, false);
Run Code Online (Sandbox Code Playgroud)
因为后者将替换对象,而不是向现有文档添加新字段或更新现有字段.在此示例中,我将最后一个参数更改为false,因为多个更新仅适用于$运算符.
如果您需要将现有日期字段(从 MySQL 格式 'yyyy-mm-dd' fe 导入)转换为 ISODate,您可以通过以下方式遍历文档:
/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});"
Run Code Online (Sandbox Code Playgroud)
您可以通过创建 ISO 日期以传统方式执行此操作
db.test.update({_id : 1}, {
$set : {
"time" : new ISODate("your current date")
}
});
Run Code Online (Sandbox Code Playgroud)
但请注意,使用 newMongo 2.6您将能够使用$currentDate非常轻松地将日期更新为当前日期。
db.test.update( { _id: 1 }, {
$currentDate: {
time: true,
},
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50079 次 |
| 最近记录: |