| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /**
- * 数据库操作
- */
- // 引入配置文件
- 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();
|