Mongodb 从.group()更改为聚合

Mongodb 从.group()更改为聚合,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我在MongoDB中执行此查询。但我希望这个查询使用聚合而不是组。这是我正在使用的查询: var query_part = { "shipdate" : { "$gte" : 19940101, "$lt" : 19950101 }, "partsupp.supplier.nation.name" : { $regex : '^CANADA'}, "partsupp.part.name" : { $regex : '^forest', $options : 'i' }

我在MongoDB中执行此查询。但我希望这个查询使用聚合而不是组。这是我正在使用的查询:

var query_part = {
    "shipdate" : { "$gte" : 19940101, "$lt" : 19950101 },
    "partsupp.supplier.nation.name" : { $regex : '^CANADA'}, 
    "partsupp.part.name" : { $regex : '^forest', $options : 'i' }
};

var red = function(doc, out) {
    out.sum += doc.quantity;
};

var half_total_quantity = db.lineitems.group( {
    key : "sum_quantity",
    cond : query_part,
    initial : { sum : 0 },
    reduce : red
})[0].sum / 2;
我正试图更改总数量的一半计算,如下所示:

db.lineitems.aggregate(
{ $match : {$and : [{"shipdate" : { "$gte" : 19940101, "$lt" : 19950101 }},
                    {"partsupp.supplier.nation.name" : { $regex : '^CANADA'}},
                    {"partsupp.part.name" : { $regex : '^forest', $options : 'i' }}
                    ]}},
{ $group : { 
    sum_quantity : { $sum: "$quantity" }
}}
);
但这不行,有人能帮我吗?
谢谢。

您几乎不需要
$和
,因为所有MongoDB查询操作都已经是“和”条件,除非另有明确说明

还需要和
\u id
,此处为
null
,表示分组“所有内容”:

db.lineitems.aggregate([
{“$match”:{
“发货日期:{“$gte”:19940101,$lt:19950101},
“partsupp.supplier.nation.name”:{“$regex”:“^CANADA”},
“partsupp.part.name”:{“$regex”:“^forest”,“$options”:“i”}
}},
{“$group”:{
“_id”:空,
“数量总和”:{“$sum”:“$quantity”}
}}
]);
不要忘记括号
[]
,因为这毕竟是管道表达式的“列表”

如果必须的话,在另一个阶段添加“halfTotalQuantity”:

db.lineitems.aggregate([
{“$match”:{
“发货日期:{“$gte”:19940101,$lt:19950101},
“partsupp.supplier.nation.name”:{“$regex”:“^CANADA”},
“partsupp.part.name”:{“$regex”:“^forest”,“$options”:“i”}
}},
{“$group”:{
“_id”:空,
“数量总和”:{“$sum”:“$quantity”}
}},
{“$project”:{
“一半数量”:{“$divide”:[“$sum_数量”,2]}
}}
]);

非常完美。非常感谢你,尼尔Lunn@duknust别忘了,因为你的叙述明显没有被接受的答案。