连接 mongoDB 中不同对象的所有数组

Med*_*edo 3 arrays concatenation mongodb mongodb-query aggregation-framework

我开始发现mongodb,我想将其连接images到同一个数组中

这个例子:

{user_id:01, images:[10,20,30,40,50]}
{user_id:02, images:[11,22,33,44,55]}
{user_id:03, images:[12,22,32,42,52]}
{user_id:04, images:[13,23,33,43,53]}
Run Code Online (Sandbox Code Playgroud)

想要的结果:

 images:[10,20,30,40,50,11,22,33,44,55,12,22,32,42,52,13,23,33,43,53]
Run Code Online (Sandbox Code Playgroud)

我通过文档找到了$aggreagation解决方案,这是我尝试过的:

  db.results.aggregate([{ $project: { images: { $concatArrays: ["$images"]}}}])
Run Code Online (Sandbox Code Playgroud)

但它只是连接来自同一个对象的数组,在我的例子中,正如我提到的,将具有不同对象result wanted名称的所有数组连接为一个images

mic*_*ckl 5

您需要两个步骤:

$group与 const 值(如null)作为分组_id以获取数组的数组(来自所有文档)和$reduce以展平所有数组

db.collection.aggregate([
    {
        $group: {
            _id: null,
            images: { $push: "$images"}
        }
    },
    {
        $project: {
            _id: 0,
            images: {
                $reduce: {
                    input: "$images",
                    initialValue: [],
                    in: {
                        $concatArrays: [ "$$this", "$$value"]
                    }
                }
            }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)