为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只斗牛犬 2021-06-28 17:23:36
问题我正在写,可以计算的功能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;

            }

        }


查看完整回答
反对 回复 2021-07-01
  • 1 回答
  • 0 关注
  • 348 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信