问题
我正在写,可以计算的功能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和手动迭代之间没有区别?
烙印99
相关分类