评论

各中订单状态一次性从数据库返回有没有更好的方法?

小程序云开发,查询数据库中的各种订单状态的记录个数汇总时,如何一次性从数据库返回所有订单状态的记录个数?

小程序云开发,查询数据库中的各种订单状态的记录个数汇总时,如何一次性从数据库返回所有订单状态的记录个数?

比如我在云数据库中新建了一个数据集合 order, 存储有若干订单, 订单状态字段为_orderStatus( 待分配订单:0表示、进行中订单:1表示、已完成订单:2表示、已取消订单:-1表示),如何一次性从数据库返回所有订单状态的记录个数。我用的是如下方法,虽然能成功返回数据,但是个人感觉因该有更好的实现方法。

const cloud = require('wx-server-sdk')
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const _ = db.command;

//查询符合条件的订单记录个数
exports.main = async (event, context) => {
    console.log("正在调用云函数:[返回符合日期条件的各种订单状态汇总] [getRecordsCount]:", event)
    let orderCancel, orderWaiting, orderProgress, orderCompletion
    try {
        //取消订单
        orderCancel = await db.collection('order')
            .where({
                _orderStatus-1,
                _orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
            }).count({
                successres => {
                    return res.result.total
                }
            });
        //等待分配订单
        orderWaiting = await db.collection('order')
            .where({
                _orderStatus0,
                _orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
            }).count({
                successfunction (res{
                    return res.result.total
                }
            });
        //进行中订单
        orderProgress = await db.collection('order')
            .where({
                _orderStatus1,
                _orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
            }).count({
                successfunction (res{
                    return res.result.total
                }
            });
        //已完成订单
        orderCompletion = await db.collection('order')
            .where({
                _orderStatus2,
                _orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
            }).count({
                successfunction (res{
                    return res.result.total
                }
            });
    } catch (err) {
        console.error(err);
    }
    return {
        orderCancel: orderCancel,
        orderWaiting: orderWaiting,
        orderProgress: orderProgress,
        orderCompletion: orderCompletion
    }
}

执行结果如下:

最后一次编辑于  2021-08-21  
点赞 1
收藏
评论

2 个评论

  • 光军
    光军
    2021-08-21

    感谢@Mr.Zhao ,修改后代码如下

    const cloud = require('wx-server-sdk')
    cloud.init({
        env: cloud.DYNAMIC_CURRENT_ENV
    })
    const db = cloud.database()
    const _ = db.command;
    const $ = db.command.aggregate
    
    
    //查询符合条件的订单记录个数
    exports.main = async (event, context) => {
        console.log("正在调用云函数:[返回符合日期条件的各种订单状态汇总] [getRecordsCount]:", event)
        try {
            return await db.collection('order').aggregate()
            .match({
                _orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
              })
                .group({
                    _id'$_orderStatus',
                    num: $.sum(1)
                })
                .end()
        } catch (err) {
            console.error(err);
        }
    }
    
    2021-08-21
    赞同 1
    回复
  • Mr.Zhao
    Mr.Zhao
    2021-08-21

    你为什么不用group?

    2021-08-21
    赞同
    回复 1
    • 光军
      光军
      2021-08-21
      感谢提醒,让我茅舍顿开!
      2021-08-21
      1
      回复
登录 后发表内容