我有2个单独的mongo聚合查询 -
mainloop()
和
db.transfer_orders.aggregate([
{
$match: {
"request_timestamp": { $gte: ISODate("2017-10-00T00:00:00.000Z") },
"request_timestamp": { $lt: ISODate("2017-10-12T00:00:00.000Z") },
"purpose": "POSITIONING"
}
},
{
$group: {
_id: null,
to_count: { $sum: 1 },
qty: { $sum: "$quantity" }
}
},
{
$project: {
_id: 0,
"to_count": "$to_count",
"qty": "$qty"
}
}
])
第一个查询返回文档顶层元素的聚合数据,{" to_count" :7810,"数量" :19470}
第二个查询返回顶层以下一个级别的元素的聚合数据,用于"调整" array - {" adjusted_quantity" :-960}
有没有办法将此写为一个将返回两组数据的查询,因为两者的匹配条件相同?
答案 0 :(得分:1)
以下聚合操作应该足够了,因为它在引入新字段adjusted_quantity
的 $match
步骤之后有一个管道。使用 $sum
可以实现这一点,它返回每个文档的指定表达式列表的总和。
一旦到达 $group
阶段,您就可以使用 $sum
运算符保留该值。
db.transfer_orders.aggregate([
{
"$match": {
"request_timestamp": { "$gte": ISODate("2017-10-00T00:00:00.000Z") },
"request_timestamp": { "$lt": ISODate("2017-10-12T00:00:00.000Z") },
"purpose": "POSITIONING"
}
},
{
"$addFields": {
"adjusted_quantity": {
"$sum": "$adjustments.change_in_quantity"
}
}
},
{
"$group": {
"_id": null,
"to_count": { "$sum": 1 },
"qty": { "$sum": "$quantity" },
"adjusted_quantity": { "$sum": "$adjusted_quantity" }
}
}
])