MongoDB -用另一个嵌套字段的值更新一个字段的值

mrzz3bfm  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(174)

我正在尝试运行一个MongoDB查询,用另一个嵌套字段的值更新一个字段的值。

{
  "name": "name",
  "address": "address",
  "times": 10,
  "snapshots": [
    {
      "dayTotal": 2,
      "dayHit": 2,
      "dayIndex": 2
    },
    {
      "dayTotal": 3,
      "dayHit": 3,
      "dayIndex": 3
    }
  ]
}

我是这样努力的:

db.netGraphMetadataDTO.updateMany( 
    { },
    [{ $set: { times: "$snapshots.$[elem].dayTotal" } }],
    {   
        arrayFilters: [{"elem.dayIndex":{"$eq": 2}}],
        upsert: false,
        multi: true
    }
);

但出现错误:
不能为管道样式更新指定arrayFilters

mwngjboj

mwngjboj1#

不能同时将arrayFilters与聚合管道一起用于更新查询。
相反,您需要做的是:
1.从结果 2 中获取dayTotal字段。
1.从结果中取出第一个匹配的文档 3
1.从snapshots数组中筛选文档。

db.netGraphMetadataDTO.updateMany({},
[
  {
    $set: {
      times: {
        $getField: {
          field: "dayTotal",
          input: {
            $first: {
              $filter: {
                input: "$snapshots",
                cond: {
                  $eq: [
                    "$$this.dayIndex",
                    2
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
],
{
  upsert: false,
  multi: true
})

Demo @ Mongo Playground

相关问题