使用mongodb聚合将值映射到数组中的值

使用mongodb聚合将值映射到数组中的值,mongodb,mongodb-query,aggregation-framework,aggregate-functions,Mongodb,Mongodb Query,Aggregation Framework,Aggregate Functions,在聚合中具有具有值的记录 _id:asdgrsdv surname:cooper, comapany:sabesto, salary:15748 mapped:Array 0:Object name:'mark', age:'25', surname:'cooper' 1:Object name:'snow', age:'29', surname:'wyte' 如何将姓氏外部映射为姓氏中的映射数组在mongodb聚合中就是这样 所需输出: _id:asdgrsdv

在聚合中具有具有值的记录

_id:asdgrsdv
surname:cooper,
comapany:sabesto,
salary:15748
mapped:Array
0:Object
  name:'mark',
  age:'25',
  surname:'cooper'
1:Object
  name:'snow',
  age:'29',
  surname:'wyte'

如何将
姓氏
外部映射为
姓氏
中的
映射数组
在mongodb聚合中就是这样

所需输出:

_id:asdgrsdv
  name:'mark',
  comapany:sabesto,
  salary:15748
  age:'25',
  surname:'cooper'

试试这个:

db.collection.aggregate([
  {
    $addFields: {
      data: {
        $mergeObjects: [
          "$$ROOT",
          {
            $arrayElemAt: [
              {
                $filter: {
                  input: "$mapped",
                  cond: {
                    $eq: [
                      "$$this.surname",
                      "$surname"
                    ]
                  }
                }
              },
              0
            ]
          }
        ]
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: "$data"
    }
  },
  {
    $project: {
      "mapped": 0
    }
  }
])

有没有办法删除
1:对象名:'snow',年龄:'29',姓氏:'wyte'
并只保留匹配值,因为如果我想在之后加入一个组。中的数据有两个年龄和姓名值,例如:25,29,而不是25@hukkemaaruspetus它已经从输出中“删除”了它。您需要更新集合中的记录吗?是的,如果它看起来像这样会更干净
\u id:5e13642ee88247a6b4f2c0f8姓氏:cooper,姓名:'mark',年龄:'25'
。TIA@hukkemaaruspetus在我们过滤
映射的
字段后,您想做什么?请再次检查@hukkemaruspetus