Я работаю над проектом отчетности, которые касаются ежемесячных заказов Мы заказов, поступающих в MongoDB в приведенном ниже форматеПоиск определенной записи в агрегации коллекции Монго DB
order:{
_id: 123456789012123456789012,
items:[
{code:'ITEM1', qty:5},{code:'ITEM2', qty:6}
]
}
Мое требование, чтобы найти , как специфический элемент занимает по отношению к другим пунктам в течение всего спектакля
Я написал эту агрегацию сначала выяснить группировку каждого пункта и количество заказанного количества
db.orders.aggregate(
[
{ $unwind : "$items" },
{ $group : {code : "$code" , tot_ord: { $sum : "$qty" } } },
{ $sort : { tot_ord : -1 } }
]
)
Так что это должно дать мне отсортированный список предметов с наивысшими заказами.
Но как бы получить звание определенного элемента без цикла? Я говорю о почти 500 000 различных предметов, поэтому я хочу избежать петли
Спасибо за помощь заранее.
ОБНОВЛЕНИЕ: ЭТО, что я, наконец, работал. В этом примере используется Node.js. Я размещаю это так, чтобы он был полезен кому-то в будущем.
function aggregate(mongoDb,collection_item, pipeline, next){
mongoDb.collection(collection_item, function(err, collection) {
collection.aggregate(pipeline,function(err,result) {
if(err){
console.log('Error aggregating: ' + err);
next({'error':'An error has occurred - ' + err});
}else{
next(result);
}
});
});
}
function calculateOrderRank(itemId){
aggregate(mongoDb, "orders",
[
{ $unwind : "$items" },
{ $match : { items.code : itemId} },
{ $group : { _id : "$items.code" , tot_qty: { $sum : "$items.qty" } } }
],function(result) {
var itemQty = result[0].tot_qty;
data.aggregate(mongoDb, "orders",
[
{ $unwind : "$items" },
{ $group : { _id : "$items.code" , tot_qty: { $sum : "$items.qty" } } },
{ $match: {tot_qty:{$gt:itemQty}} },
{ $group : {_id:null, rank : { $sum : 1 } } },
],function(result) {
var rank = 1;
if (result && result.length>0) {
rank = result[0].rank + 1;
}
res.send({item_id:itemId, rank:rank, score:itemQty});
});
}
);
}
Это не юридический конвейер агрегации - ваша «группа» не структурирована правильно. –
эта функция в настоящее время не существует в структуре агрегации. Вам понадобится https://jira.mongodb.org/browse/SERVER-8065 для реализации, чтобы получить рейтинг. –