如何在 MongoDB 3.6 中增加一秒值的日期字段?

问题描述

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 中使用单个查询是不可能的,但是:

  1. find() 特定文档
  2. forEach() 找到文档,获取日期和凹凸
  3. 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
});