如何更新mongo控制台中的日期字段?

时间:2012-01-11 14:46:33

标签: mongodb

例如,我想将所有记录更新为“2012-01-01”(“时间”:ISODate(“2011-12-31T13:52:40Z”))。

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

3 个答案:

答案 0 :(得分:52)

您需要创建一个新的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,因为多个更新仅适用于$个运算符。

答案 1 :(得分:4)

您可以通过创建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,
  },
})

答案 2 :(得分:2)

如果您需要将现有日期字段(从MySQL格式'yyyy-mm-dd'ff。导入)转换为ISODate,您可以通过这种方式遍历文档:

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