问题
我正在编写一个函数,该函数可以根据请求的avg price
计算value
和整个quantity
,例如:
async funcName (first_100) {
let market_quantity = await auctions_db.aggregate([
{
$match: {
item: 9999,
}
},
{
$sort: {
price: 1
}
},
//RESULT
]);
}
//结果
目前,我有以下文档:
{
item_id: 9999,
price: 1..Number
quantity: 1..200
value: price x quantity //it's not virtual field
},{
another doc...
}
正如我上面提到的,我想要做的是进入$sum
price
字段,直到quantity
不会达到100或100+(或其他任何数字取决于功能)论点)。
我不需要$sum
的前100个文档(按price
升序排序,在这种情况下,我会使用.limit
) >
很明显,我有两种方法可以这样做。目前,我在相同条件下使用collection.find({condition}).cursor()
,并在单独的for loop
中遍历doc,但是我知道(实际上是一位朋友告诉我) MongoDB 可以做到通过aggregate
(如果/其他)块通过$cond
阶段进行相同操作。
实际上,我认为在这种情况下,$operator
之后的下一个//Result
应该是$group
阶段,
{
$group: {
_id: "$lastModified",
quantity: {$sum: {$cond: if/else }" $quantity"},
if (below 100) {$sum: "$value" }
}
}
但是我不知道该怎么做。那么有人可以给我提供一个例子吗?
还是aggregate
阶段和.find({}).cursor
和手动迭代之间没有区别?
答案 0 :(得分:0)
实际上,我通过find({query}).cursor()
语法解决了自己的问题,并推送到类似以下的数组:
let market_quantity = await auctions_db.find({query}).cursor();
for (let order = await market_quantity.next(); order != null; order = await market_quantity.next()) {
if (quantity < arg_quantity) {
quantity += order.quantity;
price_array.push(order.price);
value += order.buyout;
} else {
break;
}
}