Node.js 在一个查询中统计具有多个条件的文档

Node.js 在一个查询中统计具有多个条件的文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图统计mongoDB(使用mongoose)中的数据库记录,其中记录的状态为pending、approved和rejected。因此,我基本上是想得到一个结果,在这个结果中,我可以显示每一个的计数,并在我的视图中显示它,即: 待定:35 核准:97 拒绝:12 我有这个,但它只计算“待定”。是否有一种方法可以在一个查询中计算所有3个查询,或者我需要运行3个单独的查询并获得每个查询的结果 Product.countDocuments({status: 'pending', userId: re

我试图统计mongoDB(使用mongoose)中的数据库记录,其中记录的状态为pending、approved和rejected。因此,我基本上是想得到一个结果,在这个结果中,我可以显示每一个的计数,并在我的视图中显示它,即:

待定:35 核准:97 拒绝:12

我有这个,但它只计算“待定”。是否有一种方法可以在一个查询中计算所有3个查询,或者我需要运行3个单独的查询并获得每个查询的结果

Product.countDocuments({status: 'pending', userId: req.session.user._id})
.then(pending => {
    if (!pending) {
        return next();
    }
    req.pending = pending;
    next();
})
.catch(err => {
    console.log(err);
});
编辑:在某种程度上,我成功地做到了这一点,在控制台中,我得到了所有结果的计数,但只需要找出如何将每个结果放入它自己的变量中

Product.aggregate([
   { $group: { _id: { status: "$status"}, totalStatus: {$sum: 1} } }
])
.then(function (res) {
    console.log(res);
    next();
  });

要在单个查询中查找多个计数,请使用mongodb聚合框架,它可以在多个阶段操作数据,您的问题已经得到回答,请访问下面的链接。我将为您更新查询。


要在单个查询中查找多个计数,请使用mongodb聚合框架,它可以在多个阶段操作数据,您的问题已经得到回答,请访问下面的链接。我将为您更新查询。


谢谢,但我想问的是如何使用Mongoose实现这一点。Mongoose还支持聚合功能。请参考以下链接。谢谢Shahab。我确实看了那里,但我真的不明白如何适用于我的情况。我对MongooseI是一个相当陌生的人,我很想把它浓缩起来,并且用一句话就几乎达到了目的。请看我编辑的问题。你认为这也合适吗
{$group:{u id:{status:$status},totalStatus:{$sum:1}}}
查询看起来很好,您正在按状态对字段进行分组。如果它满足您的要求,现在就使用它。谢谢,但我想问的是如何使用Mongoose实现这一点。Mongoose还支持聚合功能。请参考以下链接。谢谢Shahab。我确实看了那里,但我真的不明白如何适用于我的情况。我对MongooseI是一个相当陌生的人,我很想把它浓缩起来,并且用一句话就几乎达到了目的。请看我编辑的问题。你认为这也合适吗
{$group:{u id:{status:$status},totalStatus:{$sum:1}}}
查询看起来很好,您正在按状态对字段进行分组。如果它满足您的要求,现在就使用它。
Product.aggregate([
  { "$facet": {
    "Pending": [
      { "$match" : { "status": { "$exists": true, "$in":["pending"] }}},
      { "$count": "Pending" },
    ],
    "Approved": [
      { "$match" : {"status": { "$exists": true, "$in": ["approved"] }}},
      { "$count": "Approved" }
    ],
    "Rejected": [
      { "$match" : {"status": { "$exists": true, "$in": ["rejected"] }}},
      { "$count": "Rejected" }
    ]
  }},
  { "$project": {
    "Pending": { "$arrayElemAt": ["$Pending.Pending", 0] },
    "Approved": { "$arrayElemAt": ["$Approved.Approved", 0] },
    "Rejected": { "$arrayElemAt": ["$Rejected.Rejected", 0] }
  }}
])