如何在mongodb中设置和取消设置聚合更新?

如何在mongodb中设置和取消设置聚合更新?,mongodb,Mongodb,我能做$set。我正试图在一次通话中完成$unset 可能吗?Mongo版本是4.2。有什么建议吗?你就快到了。有一个小错误,$update聚合运算符接受字符串或数组 db.getCollection('name').update({"bid":"3860"}, { [ {"$set": { "tl" : { $add : [

我能做
$set
。我正试图在一次通话中完成
$unset


可能吗?Mongo版本是4.2。有什么建议吗?

你就快到了。有一个小错误,
$update
聚合运算符接受字符串或数组

db.getCollection('name').update({"bid":"3860"},
{
    [ 
    {"$set":
        { "tl" :
            { $add : 
                [   
                    {
                      $multiply: ["$intField", 24*60*60*1000]
                    },
                    "$dateField"
                ]
            }
        }
    },
    { "$unset": {'intField' : 1}}
    ]
    
}
}
)
它与
$unset update
运算符语法不同。它是
$unset aggregate
运算符格式


此聚合管道更新将使用聚合系统变量从文档中删除
intField
字段:

db.getCollection('name').update({
  "bid": "3860"
},

  [
    {
      "$set": {
        "tl": {
          $add: [
            {
              $multiply: [
                "$intField",
                24*60*60*1000
              ]
            },
            "$dateField"
          ]
        }
      }
    },
    {
      "$unset": 'int2Field' -->change here
    } 
  ]

})

我可以在$set和$unset中使用相同的字段吗?因为我使用的是相同的字段,unset成功,但$set不能正常工作expected@Mano@Yousaf你有什么想法吗?@Gibbs没有更新什么?有错误吗?从
mongo
shell运行时,它工作正常。聚合管道更新仅适用于MongoDB v4.2或更高版本。此外,您还需要尝试这样的输入文档:
{“\u id”:1,“intField”:25,“dateField”:ISODate(“2020-07-16T09:43:03.954Z”)}
。另外,请注意,
db.set.update
中的
set
是集合的名称(您可以使用替换)。@Gibbs,生成的文档如下:
{“_id”:1,“dateField”:ISODate(“2020-07-16T09:43:03.954Z”),“t1”:ISODate(“2020-08-10T09:43:03.954Z”)
。注意,
intField
被删除或取消设置。是的,我有4.2版本。我在机器人3t上也试过。让我再检查一下。
db.set.update( 
  { },
  [ 
    { 
       $set: { 
         t1: { $add: [ { $multiply: ["$intField", 24*60*60*1000 ] }, "$dateField" ] }, 
         intField: "$$REMOVE" 
       } 
    } 
  ] 
)