我有BlogPost
模型,其中两个属性为draft: Boolean
和user: String
。
使用Mongoose的mongo聚合框架,是否可以在一个查询中获得以下计数?
BlogPost.count({ user: userID }, function(err, response() {});
BlogPost.count({ user: userID, draft: true }, function(err, response() {});
答案 0 :(得分:3)
$cond
运算符是一个三元运算符,它将条件表达式计算为true/false
,并根据评估分别返回第二个或第三个参数。在这种情况下,您的字段是布尔true/false
,因此无需使用其他运算符进行测试。您可以在$sum
:
BlogPost.aggregate(
[
{ "$group": {
"_id": null,
"total_count": { "$sum": 1 },
"draft_count": { "$sum": { "$cond": [ "$draft", 1, 0 ] } }
}
],
function(err,results) {
}
);
将null
传入_id
组的值意味着您不是"分组"在任何特定的文档密钥上,但是对集合中的文档所有进行分组。
答案 1 :(得分:0)
这是一个聚合查询,当我们在使用它的一个查询中必须计数十个以上的表数据时
const res= await taskModel.aggregate([
{
$facet:
{
"count1": [
{
$match:
{ user_id: ObjectId(data.user_id) }
}, { $count: "mycount" }]
,
"count2":
[{
$match:
{
$and:
[{ user_id: ObjectId(data.user_id) }, { task_status: 2 }]
}
},
{ $count: "mycount" }]
}
}])