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