【发布时间】:2021-07-14 00:45:52
【问题描述】:
不是一个特别强大的 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
所以我认为我正在尝试在某处的null 上调用getTime,即使我的更新中的查询应该只返回存在my_date 的文档。
关于这里发生了什么的任何想法?更重要的是:有没有更好的方法来做到这一点?
【问题讨论】:
-
疑难解答建议:您是否尝试过在执行 db.blah.update 之前输出 doc.my_date?它可以告诉你它阻塞的 my_date 的值是多少。
-
@Philipp 嘿,谢谢。事后看来,其中一件非常明显的事情。 ;)
-
这是否适用于更现代的版本。我们有 2020 年的解决方案吗?
标签: javascript mongodb