我不是一个特别强大的Javascript专家,在尝试更新Mongo中的许多Date对象时遇到了一些麻烦。

看来 $inc has not yet been implemented for Date objects。因此,为了每天减少一些约会,我通过mongo myScript.js从bash调用了(类似)此脚本:

conn = new Mongo();
db   = conn.getDB('myDatabase');

var incrementDates = function() {
  db.blah.find(myQuery).forEach(function(doc) {

    db.blah.update(
       { _id     : doc._id
       , my_date : { $exists : true }
       }
     , { $set : { my_date : new Date(doc.my_date.getTime() + 86400000) }}
    );

  });
}

incrementDates();

基本想法似乎在mongoDB shell中已经足够好了:
> var doc = db.blah.findOne(myQuery)
> doc.my_date
ISODate("1962-11-02T23:00:00Z")
> new Date(doc.my_date.getTime() + 86400000);
ISODate("1962-11-03T23:00:00Z")

但是在脚本中效果不佳:
TypeError: doc.my_date has no properties

因此,我认为我试图在某个地方的getTime上调用null,即使我的更新中的查询仅应返回存在my_date的文档。

关于这里发生的事情有什么想法吗?更重要的是:还有更好的方法吗?

最佳答案

问题是我的$exists查询(显然,第二眼看)在错误的位置。当然,返回的文档中不包含my_date

这是修补功能,可以正常使用。

var incrementDates = function() {
  db.blah.find({ ... , my_date : { $exists : true } ).forEach(function(doc) {
    db.blah.update(
       { _id     : doc._id }
     , { $set : { my_date : new Date(doc.my_date.getTime() + 86400000) }}
    );
  });
}

07-24 13:03