我不是一个特别强大的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) }}
);
});
}