Mongodb 使用一个请求更新数组子文档的字段

Mongodb 使用一个请求更新数组子文档的字段,mongodb,Mongodb,我收集了以下文件: { _id: 'test', values: [ { foo: 1, bar: [<very big array>] }, { foo: 4, bar: [<very big array>] }, { foo: 3, bar: [<very big array>] } ] } 结果如下: { _id: 'test', values: [

我收集了以下文件:

{
    _id: 'test',
    values: [
        { foo: 1, bar: [<very big array>] },
        { foo: 4, bar: [<very big array>] },
        { foo: 3, bar: [<very big array>] }
    ]
}
结果如下:

{
    _id: 'test',
    values: [
        { foo: 2, bar: [<very big array>] },
        { foo: 3, bar: [<very big array>] },
        { foo: 4, bar: [<very big array>] }
    ]
}
{
_id:'测试',
价值观:[
{foo:2,bar:[]},
{foo:3,bar:[]},
{foo:4,bar:[]}
]
}
但我不知道我必须如何写我的更新请求


我使用的是MongoDB 4.0,没有访问4.2功能的权限。

从v4.2开始,您可以从中受益

它使您能够使用和计算新阵列:


确保
值的大小与更新数组的大小相同。

您是否使用MongoDB 4.2版或更高版本?如果是这样,我建议使用
$function
。@Rfroes87我编辑了我的问题。我正在使用MongoDB 4.0。
{
    _id: 'test',
    values: [
        { foo: 2, bar: [<very big array>] },
        { foo: 3, bar: [<very big array>] },
        { foo: 4, bar: [<very big array>] }
    ]
}
db.collection.updateOne(
    {_id: "test"},
    [{$set: {
      values: {
        $map: {
          input: {
            $zip: {
              inputs: [
                "$values.bar",
                [2,3,4]
              ]
            }
          },
          as: "item",
          in: {
            foo: {
              $arrayElemAt: [
                "$$item",
                1
              ]
            },
            bar: {
              $arrayElemAt: [
                "$$item",
                0
              ]
            }
          }
        }
      }
    }}]
)