在mongodb中展开不同的数组

mrfwxfqh  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(98)

让我们假设我有一个MongoDB集合,其中包含这样的文档:

{
   id: "xyz",
   prop1: "val1",
   prop2: "val2",
   array1: [
       {arr1objid:"1"},
       {arr1objid:"2"},
   ],
   array2: [
       {arr2objid:"a"},
       {arr2objid:"b"},
   ]
}

字符串
有没有可能使用某种聚合(也许是带有$unwind的东西)来获得这样的东西?

{
   id: "xyz",
   prop1: "val1",
   prop2: "val2",
   array1: {
       arr1objid:"1"
   }
},
{
   id: "xyz",
   prop1: "val1",
   prop2: "val2",
   array1: {
       arr1objid:"2"
   }
},
{
   id: "xyz",
   prop1: "val1",
   prop2: "val2",
   array2: {
       arr2objid:"a"
   }
},
{
   id: "xyz",
   prop1: "val1",
   prop2: "val2",
   array2: {
       arr2objid:"b"
   }
}


非常感谢您的任何建议。

n9vozmp4

n9vozmp41#

是的,你应该使用$facet,它允许你执行多个管道(一个用于“array1”,一个用于“array2”),然后我们只需要合并它们

db.collection.aggregate([
  {
    $facet: {
      array1: [
        {
          $unwind: "$array1"
        },
        {
          $project: {
            array2: 0
          }
        }
      ],
      array2: [
        {
          $unwind: "$array2"
        },
        {
          $project: {
            array1: 0
          }
        }
      ],
      
    }
  },
  {
    $project: {
      roots: {
        "$concatArrays": [
          "$array1",
          "$array2"
        ]
      }
    }
  },
  {
    $unwind: "$roots"
  },
  {
    "$replaceRoot": {
      "newRoot": "$roots"
    }
  }
])

字符串
Mongo Playground

相关问题