猿问

MongoDB聚合总和直到条件(if/else)或计数价格和数量问题

问题


我正在写,可以计算的功能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和手动迭代之间没有区别?


一只斗牛犬
浏览 349回答 1
1回答

烙印99

实际上,我通过find({query}).cursor()语法解决了我的问题并推送到数组,例如:&nbsp; &nbsp; &nbsp; &nbsp; let market_quantity = await auctions_db.find({query}).cursor();&nbsp; &nbsp; &nbsp; &nbsp; for (let order = await market_quantity.next(); order != null; order = await market_quantity.next()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (quantity < arg_quantity) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; quantity += order.quantity;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; price_array.push(order.price);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value += order.buyout;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答