我在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;
我正在尝试更改half_total_quantity计算,如下所示:
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" }
}}
);
但这不起作用,有人可以帮助我吗? 谢谢。
答案 0 :(得分:3)
您几乎不需要$and
,因为所有 MongoDB查询操作已经是" AND"条件,除非另有明确说明。
同样$group
需要_id
,这里null
表示分组"所有内容":
db.lineitems.aggregate([
{ "$match": {
"shipdate" : { "$gte" : 19940101, "$lt" : 19950101 },
"partsupp.supplier.nation.name" : { "$regex": '^CANADA' },
"partsupp.part.name" : { "$regex": '^forest', "$options": 'i' }
}},
{ "$group": {
"_id": null,
"sum_quantity": { "$sum": "$quantity" }
}}
]);
不要忘记括号[]
,因为这是一个"列表"管道表达式,毕竟。
并添加" halfTotalQuantity"事情,只是在$divide
阶段的$project
,如果你必须:
db.lineitems.aggregate([
{ "$match": {
"shipdate" : { "$gte" : 19940101, "$lt" : 19950101 },
"partsupp.supplier.nation.name" : { "$regex": '^CANADA' },
"partsupp.part.name" : { "$regex": '^forest', "$options": 'i' }
}},
{ "$group": {
"_id": null,
"sum_quantity": { "$sum": "$quantity" }
}},
{ "$project": {
"half_quantity": { "$divide": [ "$sum_quantity", 2 ] }
}}
]);