聚合查找是提供用于匹配值的对象数组。如何将该数组组合成一个对象?

Aggregate lookup is giving array of objects for matching values. How to combine that array into one object?

提问人:dsib 提问时间:11/1/2023 更新时间:11/1/2023 访问量:21

问:

这些是我的收藏,coll1 和 coll2。我正在执行查找以从这些集合中获取数据。现在,由于 coll2 有多个匹配的文档,我得到了一个带有 coll1 结果的对象数组。我已经添加了详细信息供您参考。 coll1:

[
{
  "name":"n1",
  "pid":"p1",
  "other":"other details"
}
]

coll2:

[
{
  "name":"n1",
  "pid":"p1",
  "pname":"pname1",
  "padd":"padd1"
},
{
  "name":"n1",
  "pid":"p1",
  "pname":"pname2",
  "padd":"padd2"
}
]

这是我的查询:

[
{
  "$lookup":{
     "from":"coll2",
     "let":{
        "name":"$name",
        "pid":"$pid"
     },
     "pipeline":[
        {
           "$match":{
              "$expr":{
                 "$and":[
                    {
                       "$eq":[
                          "$name",
                          "$$name"
                       ]
                    },
                    {
                       "$eq":[
                          "$pid",
                          "$$pid"
                       ]
                    }
                 ]
              }
           }
        }
     ],
     "as":"newProp"
  }
}
]

我得到的结果如下:

[
{
  "name":"n1",
  "pid":"p1",
  "other":"other details",
  "newProp":[
     {
        "name":"n1",
        "pid":"p1",
        "pname":"pname1",
        "padd":"padd1"
     },
     {
        "name":"n1",
        "pid":"p1",
        "pname":"pname2",
        "padd":"padd2"
     }
  ]
}
]

我希望结果为具有键值更新的单个对象,如下所示:

[
{
  "name":"n1",
  "pid":"p1",
  "other":"other details",
  "newProp":{
     "name":"n1",
     "pid":"p1",
     "pname1":"padd1",
     "pname2":"padd2"
  }
}
]

提前致谢。

数组 MongoDB 聚合 查找

评论


答: 暂无答案