各中订单状态一次性从数据库返回有没有更好的方法?
小程序云开发,查询数据库中的各种订单状态的记录个数汇总时,如何一次性从数据库返回所有订单状态的记录个数?
比如我在云数据库中新建了一个数据集合 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({
success: res => {
return res.result.total
}
});
//等待分配订单
orderWaiting = await db.collection('order')
.where({
_orderStatus: 0,
_orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
}).count({
success: function (res) {
return res.result.total
}
});
//进行中订单
orderProgress = await db.collection('order')
.where({
_orderStatus: 1,
_orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
}).count({
success: function (res) {
return res.result.total
}
});
//已完成订单
orderCompletion = await db.collection('order')
.where({
_orderStatus: 2,
_orderGenerationTime: _.gte(event.sdate).and(_.lte(event.edate))
}).count({
success: function (res) {
return res.result.total
}
});
} catch (err) {
console.error(err);
}
return {
orderCancel: orderCancel,
orderWaiting: orderWaiting,
orderProgress: orderProgress,
orderCompletion: orderCompletion
}
}
执行结果如下:
2 回复
感谢@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);
}
}