mongodb$project生成一个数组值数组

mongodb$project生成一个数组值数组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一张订单表和一张表格表。表单有很多订单,我成功地运行了$lookup,如下所示: { from: 'orders', localField: 'slug', foreignField: 'form_slug', as: 'orders' } 然后我尝试这样做: {数量:$orders.line_items.quantity} 问题是我得到了一个嵌套数组的数组(见下面的结果),而我实际上只想要一个总和 是否可以在嵌套数组中以某种方式对这些值求和 "quanti

我有一张订单表和一张表格表。表单有很多订单,我成功地运行了$lookup,如下所示:

{
    from: 'orders',
    localField: 'slug',
    foreignField: 'form_slug',
    as: 'orders'
}
然后我尝试这样做:

{数量:$orders.line_items.quantity}

问题是我得到了一个嵌套数组的数组(见下面的结果),而我实际上只想要一个总和

是否可以在嵌套数组中以某种方式对这些值求和

"quantities": [
    [
        NumberLong(1)
    ],
    [
        NumberLong(1),
        NumberLong(1)
    ],
    [
        NumberLong(1)
    ],
    [
        NumberLong(1)
    ],
    [
        NumberLong(1)
    ],
    [
        NumberLong(1),
        NumberLong(1),
        NumberLong(1)
    ],
    [
        NumberLong(1)
    ],
    [
        NumberLong(1)
    ]
]

您可以尝试聚合
mongo3.4
version

下面的查询使用
$reduce
$concatarray
来减少到与另一个
$reduce
链接的值数组,以计算总数

{
 $project: {
        total: {
            $reduce: {
                input: {
                    $reduce: {
                        input: "$orders.line_items.quantity",
                        initialValue: [],
                        in: {
                            $concatArrays: ["$$value", "$$this"]
                        }
                    }
                },
                initialValue: 0,
                in: {
                    $add: ["$$value", "$$this"]
                }
            }
        }
    }
}
Mongo 3.2及更低版本。在
$lookup

{$unwind:"$orders"},
{$unwind:"$orders.line_items"},
{$unwind:"$orders.line_items.quantity"},
{$group:{"_id":null, total:{"$sum":"$orders.line_items.quantity"}}}

您可以尝试聚合
mongo3.4
version

下面的查询使用
$reduce
$concatarray
来减少到与另一个
$reduce
链接的值数组,以计算总数

{
 $project: {
        total: {
            $reduce: {
                input: {
                    $reduce: {
                        input: "$orders.line_items.quantity",
                        initialValue: [],
                        in: {
                            $concatArrays: ["$$value", "$$this"]
                        }
                    }
                },
                initialValue: 0,
                in: {
                    $add: ["$$value", "$$this"]
                }
            }
        }
    }
}
Mongo 3.2及更低版本。在
$lookup

{$unwind:"$orders"},
{$unwind:"$orders.line_items"},
{$unwind:"$orders.line_items.quantity"},
{$group:{"_id":null, total:{"$sum":"$orders.line_items.quantity"}}}
查询

{ "$lookup": { "from": "orders", "localField": "slug", "foreignField": "form_slug", "as": "orders" } }, { "$unwind": "$orders" }, { "$unwind": "$orders.line_items.quantities" }, { "$unwind": "$orders.line_items.quantities" }, { "$group": { "_id": "$_id", "sum": { "$sum": "$orders.line_items.quantities" } } } { “$lookup”:{ “发件人”:“订单”, “localField”:“slug”, “外域”:“形式”, “as”:“订单” } }, { “$REWIND”:“$orders” }, { “$unwind”:“$orders.line\U items.QUOTES” }, { “$unwind”:“$orders.line\U items.QUOTES” }, { “$group”:{ “\u id”:“$\u id”, “总和”:{ “$sum”:“$orders.行项目.数量” } } }
查询

{ "$lookup": { "from": "orders", "localField": "slug", "foreignField": "form_slug", "as": "orders" } }, { "$unwind": "$orders" }, { "$unwind": "$orders.line_items.quantities" }, { "$unwind": "$orders.line_items.quantities" }, { "$group": { "_id": "$_id", "sum": { "$sum": "$orders.line_items.quantities" } } } { “$lookup”:{ “发件人”:“订单”, “localField”:“slug”, “外域”:“形式”, “as”:“订单” } }, { “$REWIND”:“$orders” }, { “$unwind”:“$orders.line\U items.QUOTES” }, { “$unwind”:“$orders.line\U items.QUOTES” }, { “$group”:{ “\u id”:“$\u id”, “总和”:{ “$sum”:“$orders.行项目.数量” } } }
因为我使用的是3.2版本,所以这很有效,尽管我认为第二次放松时有一个打字错误。这不应该是“$unwind”:“$orders.line\U items”?因为我使用的是3.2版本,这很有效,尽管我认为在第二次unwind中有输入错误。这不应该是“$REWIND”:“$orders.line\U项目”?