Node.js mongodb匹配和组2查询合一

Node.js mongodb匹配和组2查询合一,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,有没有办法组合上面的两个聚合查询 我想统计集合中的所有条目,以及一周内创建的条目。 预期结果: var oneWeekAgo = new Date(); oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); User.aggregate([ { $match: { isAdmin: false, isActive: true } }, { $group: {

有没有办法组合上面的两个聚合查询

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

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
                        }
                    }
                },
            ])

您可以像这样将内部
$group
组合在一起

  • 运算符有三个参数
    ($cond:[如果检查条件,则为else])
  • 第一部分如果条件使用$and运算符检查您的条件,如果条件为真,则返回
    1
    否则
    0

1,0的作用是什么?你能解释一下或者留下一个链接吗?谢谢你@turivishal
[ { _id: null, totalCount: 100 , lastWeekTotal: 10 } ] 
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
          ]
        }
      }
    }
  }
])