Files
t/uniCloud-alipay/cloudfunctions/common/uni-stat/stat/mod/uni-pay/dao/uniIdUsers.js
T
2025-03-12 20:11:03 +08:00

71 lines
1.6 KiB
JavaScript

/**
* 数据库操作
*/
// 引入配置文件
const dbName = require("./config");
// 创建数据库对象
let db = uniCloud.database();
// 获取数据库命令对象
let _ = db.command;
// 获取聚合操作对象
let $ = _.aggregate;
class Dao {
// 计算符合条件的文档数量
async count(whereJson) {
let dbRes = await db.collection(dbName.uniIdUsers).where(whereJson).count();
return dbRes && dbRes.total ? dbRes.total : 0;
}
// 计算具有指定状态的新用户订单数量
async countNewUserOrder(obj) {
let {
whereJson,
status
} = obj;
let dbRes = await db.collection(dbName.uniIdUsers).aggregate()
.match(whereJson) // 匹配条件
.lookup({
from: dbName.uniPayOrders, // 关联集合名称
let: {
user_id: '$_id', // 定义关联字段
},
pipeline: $.pipeline()
.match(_.expr($.and([
$.eq(['$user_id', '$$user_id']), // 关联条件
$.in(['$status', status]) // 关联条件
])))
.limit(1) // 返回结果数量限制
.done(), // 结束关联管道
as: 'order', // 关联结果存储字段
})
.unwind({
path: '$order', // 展开关联结果
})
.group({
_id: null, // 分组字段为null,表示整个集合作为一个组
count: {
$addToSet: '$_id' // 将符合条件的文档_id添加到数组
},
})
.addFields({
count: {
$size: '$count' // 统计数组的长度,即订单数量
}
})
.end(); // 执行聚合操作并返回结果
try {
return dbRes.data[0].count; // 返回订单数量
} catch (err) {
return 0; // 出现错误时返回0
}
}
}
module.exports = new Dao();