Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 更新的$sert、$unset(聚合)中是否可以使用相同的字段_Mongodb - Fatal编程技术网

Mongodb 更新的$sert、$unset(聚合)中是否可以使用相同的字段

Mongodb 更新的$sert、$unset(聚合)中是否可以使用相同的字段,mongodb,Mongodb,我回答 我无法解释同一字段不能按set然后unset的顺序在update(aggregate)中使用的原因 db.getCollection('name').update({ "bid": "3860" }, { [ { "$set": { "tl": { $add: [ { $multiply: [

我回答

我无法解释同一字段不能按
set
然后
unset
的顺序在
update(aggregate)
中使用的原因

db.getCollection('name').update({
  "bid": "3860"
},
{
  [
    {
      "$set": {
        "tl": {
          $add: [
            {
              $multiply: [
                "$intField",
                24*60*60*1000
              ]
            },
            "$dateField"
          ]
        }
      }
    },
    {
      "$unset": 'intField' //Here
    } 
  ]
}
})
乍一看,这似乎是正确的。由于提到了聚合运算符
[]
,我相信
$set
可以使用该
$intField
,然后它可以
$unset

db.getCollection('name').update({
  "bid": "3860"
},
{
  [
    {
      "$set": {
        "tl": {
          $add: [
            {
              $multiply: [
                "$intField",
                24*60*60*1000
              ]
            },
            "$dateField"
          ]
        }
      }
    },
    {
      "$unset": 'intField' //Here
    } 
  ]
}
})

请帮助我理解这一点。

您可以在更新聚合管道的
$set
$unset
阶段中使用相同的字段

查询中存在语法错误。
.update()
函数的第二个参数应该是数组而不是对象。去掉
[]
周围的大括号,查询就可以了

db.getCollection('name').update(
   {"bid": "3860"},
   [
       {
         "$set": {
            "tl": {
               $add: [
                  {
                     $multiply: ["$intField", 24*60*60*1000 ]
                  },
                  "$dateField"
               ]
             }
          }
       },
       { "$unset": 'intField' } 
  ]
);

即使我在
{}
中提供了
[]
,它是如何工作的?如果在使用更新聚合时将对象作为第二个参数传递,我认为它不起作用。在中给出的所有示例都将数组作为第二个参数而不是对象传递。