0

我有一个文件

{
   propertyA: [
      { name: 'jim', group: 'a'},
      { name: 'bob', group: 'a'},
      { name: 'alice', group: 'b'},
   ],
   propertyB: [
      { group: 'a', numberOfTimes: 2 }
      { group: 'b', numberOfTimes: 6 }
   ]
}

我希望能够通过聚合实现的是

{
    result: [
      { name: 'jim', group: 'a', numberOfTimes: 2},
      { name: 'bob', group: 'a', numberOfTimes: 2},
      { name: 'alice', group: 'b', numberOfTimes: 6},
    ]
}

有点卡住,甚至不确定要搜索什么......任何帮助将不胜感激。

4

1 回答 1

1

询问

  • 解决方案不使用查找或展开等
  • 它在文档级别执行
  • 对于“propertyA”的每个成员,从组中找到 propertyB 并获取 numberOfTimes
  • 合并对象以添加 numberOfTimes

*以上假设所有组都存在于propertyA和PropertyB中。(如您的示例示例)如果您的组仅存在于其中一个属性中,如果您能告诉我们如何处理它们

测试代码在这里

db.collection.aggregate([
  {
    "$project": {
      "result": {
        "$map": {
          "input": "$propertyA",
          "in": {
            "$let": {
              "vars": {
                "nt": {
                  "$filter": {
                    "input": "$propertyB",
                    "cond": {
                      "$eq": [
                        "$$pb.group",
                        "$$pa.group"
                      ]
                    },
                    "as": "pb"
                  }
                }
              },
              "in": {
                "$mergeObjects": [
                  "$$pa",
                  {
                    "$arrayElemAt": [
                      "$$nt",
                      0
                    ]
                  }
                ]
              }
            }
          },
          "as": "pa"
        }
      },
      "_id": 0
    }
  }
])
于 2021-09-19T18:49:18.457 回答