如何在特定字段MongoDB上找到不同的文档编号并根据条件打印文档计数?



我需要获得不同的categoryCodecategoryName,并打印重复文档数量的组合计数。这里有一个条件,匹配操作获得基于cat_type的所有文档,如果cat_type不存在,则在类别响应计数中显示为0。样本数据:

[
{
"cat_id":1,
"categoryCode":"categoryCode1",
"categoryName":"categoryName1",
"cat_type":"A"
},
{
"cat_id":2,
"categoryCode":"categoryCode1",
"categoryName":"categoryName1",
"cat_type":"A"
},
{
"cat_id":3,
"categoryCode":"categoryCode2",
"categoryName":"categoryName2",
"cat_type":"C"
},
{
"cat_id":4,
"categoryCode":"categoryCode3",
"categoryName":"categoryName3",
"cat_type":"A"
}
]

预期输出:这里与cat_type='A'匹配,category1和category3有cat_type='A',然后计数正常打印,但category2没有这个cat_type,然后category2也显示与cat_count=0响应

[
{
"categoryCode":"categoryCode1",
"categoryName":"categoryName1",
"cat_count": 2
},
{
"categoryCode":"categoryCode2",
"categoryName":"categoryName2",
"cat_count": 0
},
{
"categoryCode":"categoryCode3",
"categoryName":"categoryName3",
"cat_count": 1
}
]

我正在使用这个查询- https://mongoplayground.net/p/EasRK2xyLkG

db.collection.aggregate([
{
"$match": {
"cat_type": "A"
}
},
{
$group: {
_id: {
"categoryCode": "$categoryCode",
"categoryName": "$categoryName"
},
"cat_count": {
$sum: 1
}
}
},
{
$project: {
"_id": 0,
"categoryCode": "$_id.categoryCode",
"categoryName": "$_id.categoryName",
"cat_count": "$cat_count"
}
}
])

对于这个查询,第二个类别不匹配,所以在响应中它没有显示。

  • remove$matchstage
  • 检查sum时的条件,如果cat_type为"然后返回1,否则返回0
{
$group: {
_id: {
"categoryCode": "$categoryCode",
"categoryName": "$categoryName"
},
"cat_count": {
$sum: {
$cond: [{ $eq: ["$cat_type", "A"] }, 1, 0]
}
}
}
}

游乐场

最新更新