Mongodb 从.group()更改为聚合
我在MongoDB中执行此查询。但我希望这个查询使用聚合而不是组。这是我正在使用的查询: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' }
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别忘了,因为你的叙述明显没有被接受的答案。