node.js - mongodb 匹配和组 2 查询合二为一

标签 node.js mongodb mongoose

var oneWeekAgo = new Date();
oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);  



  User.aggregate([
            { $match: { isAdmin: false, isActive: true } },
            {
                $group: {
                    _id: null,
                    totalCount: {
                        $sum: 1
                    }
                }
            },
        ])


  User.aggregate([
                { $match: { isAdmin: false, dateCreated: { $gte: oneWeekAgo }, isActive: true } },
                {
                    $group: {
                        _id: null,
                        lastWeekTotal: {
                            $sum: 1
                        }
                    }
                },
            ])

有没有办法结合上面的 2 个聚合查询?

我想统计集合中的所有条目以及一周内创建的条目。 预期结果:

[ { _id: null, totalCount: 100 , lastWeekTotal: 10 } ] 

最佳答案

你可以像这样将 $group 组合在一起,

  • $cond运算符,一共有三个参数 ($cond: [if check condition, then, else])
  • 第一部分 if condition 使用 $and 运算符检查您的条件,如果条件为真则返回 1 否则返回 0
User.aggregate([
  {
    $group: {
      _id: null,
      totalCount: {
        $sum: {
          $cond: [
            {
              $and: [
                { $eq: ["$isAdmin", false] },
                { $eq: ["$isActive", true] }
              ]
            },
            1,
            0
          ]
        }
      },
      lastWeekTotal: {
        $sum: {
          $cond: [
            {
              $and: [
                { $gte: ["$dateCreated", oneWeekAgo] },
                { $eq: ["$isAdmin", false] },
                { $eq: ["$isActive", true] }
              ]
            },
            1,
            0
          ]
        }
      }
    }
  }
])

Playground

关于node.js - mongodb 匹配和组 2 查询合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63487510/

相关文章:

php - memcached 或 MongoDB 以减轻繁重的数据库调用

node.js - 如何在模式数组中发布和更新模式并打印它?

node.js - 如何保存数组?

node.js - AWS Lambda 任务在 3.00 秒后超时

javascript - Mongoose 和人口嵌套

javascript - MongoDB 查询仅适用于复制和粘贴

javascript - Mongoose 通过子文档的_id查找文档

node.js - 如何在 Mongoose 查询中连接多个字段?

node.js - 如何将大量 JSON 数据导出到 Excel 文件

javascript - 如何在 Node.js 中对 ndarray 应用剪切?