问题我正在写,可以计算的功能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()相同的条件并在单独的 doc 上迭代 doc for loop,但我知道(实际上一个朋友告诉我)MongoDB可以aggregate通过$cond(if/else) 块通过stage来做同样的事情。实际上,我想在这种情况下,下一个$operator之后//Result应该是$group阶段,如下所示: { $group: { _id: "$lastModified", quantity: {$sum: {$cond: if/else }" $quantity"}, if (below 100) {$sum: "$value" } } }但我不知道该怎么做。那么谁能给我举个例子呢?或者aggregate阶段.find({}).cursor和手动迭代之间没有区别?
1 回答
烙印99
TA贡献1829条经验 获得超13个赞
实际上,我通过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;
}
}
添加回答
举报
0/150
提交
取消