问题描述
MongoDB 脚本对我来说仍然很神秘,并且在 3.6 服务器上遇到了这个问题,缺少 4.2 中的高级运算符。
如何在 MongoDB 3.6 中增加一秒值的日期字段?
例如,我想做这样的事情:
db.getCollection("therecords").update(
{
"_id" : ObjectId("123etc")
},{
$set: {
updatedAt : "$updatedAt" + 1 ;
}
}
);
...将值设置为可爱的文本 $updatedAt1
。
使用不带引号或不带 $ 前缀的 updatedAt
时会抛出其他可爱的错误。
更笼统地说,有没有办法用 update … $set
重用当前值?
解决方法
我认为在 MongoDB v3.6 中使用单个查询是不可能的,但是:
-
find()
特定文档 -
forEach()
找到文档,获取日期和凹凸 -
save()
回来
db.getCollection("therecords").find(
{
"_id" : ObjectId("123etc")
}
).forEach(function(doc) {
var d = new Date(doc.createdAt);
d.setSeconds(d.getSeconds() + 1);
doc.createdAt = d;
db.getCollection("therecords").save(doc); // Save each back
});