uniIdUsers.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * 数据库操作
  3. */
  4. // 引入配置文件
  5. const dbName = require("./config");
  6. // 创建数据库对象
  7. let db = uniCloud.database();
  8. // 获取数据库命令对象
  9. let _ = db.command;
  10. // 获取聚合操作对象
  11. let $ = _.aggregate;
  12. class Dao {
  13. // 计算符合条件的文档数量
  14. async count(whereJson) {
  15. let dbRes = await db.collection(dbName.uniIdUsers).where(whereJson).count();
  16. return dbRes && dbRes.total ? dbRes.total : 0;
  17. }
  18. // 计算具有指定状态的新用户订单数量
  19. async countNewUserOrder(obj) {
  20. let {
  21. whereJson,
  22. status
  23. } = obj;
  24. let dbRes = await db.collection(dbName.uniIdUsers).aggregate()
  25. .match(whereJson) // 匹配条件
  26. .lookup({
  27. from: dbName.uniPayOrders, // 关联集合名称
  28. let: {
  29. user_id: '$_id', // 定义关联字段
  30. },
  31. pipeline: $.pipeline()
  32. .match(_.expr($.and([
  33. $.eq(['$user_id', '$$user_id']), // 关联条件
  34. $.in(['$status', status]) // 关联条件
  35. ])))
  36. .limit(1) // 返回结果数量限制
  37. .done(), // 结束关联管道
  38. as: 'order', // 关联结果存储字段
  39. })
  40. .unwind({
  41. path: '$order', // 展开关联结果
  42. })
  43. .group({
  44. _id: null, // 分组字段为null,表示整个集合作为一个组
  45. count: {
  46. $addToSet: '$_id' // 将符合条件的文档_id添加到数组
  47. },
  48. })
  49. .addFields({
  50. count: {
  51. $size: '$count' // 统计数组的长度,即订单数量
  52. }
  53. })
  54. .end(); // 执行聚合操作并返回结果
  55. try {
  56. return dbRes.data[0].count; // 返回订单数量
  57. } catch (err) {
  58. return 0; // 出现错误时返回0
  59. }
  60. }
  61. }
  62. module.exports = new Dao();