首页 > 解决方案 > 使用不同的值更新MongoDB中数组内的多个对象值而不循环,但纯查询

问题描述

我想在 MongoDB 中更新此文档

[
   {
      "persons" : [
         {
            "name":"Javier",
            "occupation":"teacher"
         },
         {
            "name":"Juliana",
            "occupation":"novelist"
         },
         {
            "name":"Henry",
            "occupation":"plumber"
         }
      ]
   }
]

假设我有一个包含这个的全局数组变量

var peopleGlobalVar = [
   {
      "name":"Javier",
      "occupation":"gardener"
   },
   {
      "name":"Henry",
      "occupation":"postman"
   }
]

我想用 globalVar 中的值更新文档,而不使用常见的 javascript 循环,所以如果名称匹配,职业值会改变,我正在寻找“纯查询”解决方案。

我期望的代码:

collection.update(
   {},
   {
      $set: {
         // code ...
      }
   },
   {
   $arrayFilter: [
    {
      "elem.name": {
        $in: 
          $function : {
             body: function(updatedPeopleFromGlobalVariable){
                let names = [];
                updatedPeopleFromGlobalVariable.forEach(function(person){
                   names.push(person.name);
                return names;
             },
             args: peopleGlobalVar,
             lang:"js",
          }
      },
      "multi": true
    }
  ]
}
)

输出应该是什么

[
   {
      "persons" : [
         {
            "name":"Javier",
            "occupation":"gardener"
         },
         {
            "name":"Juliana",
            "occupation":"novelist"
         },
         {
            "name":"Henry",
            "occupation":"postman"
         }
      ]
   }
]

有人有解决方案吗?

标签: arraysmongodbmongodb-querynosql-aggregation

解决方案


推荐阅读