【发布时间】:2021-12-07 23:41:49
【问题描述】:
我需要获取不同的 categoryCode 和 categoryName 并使用重复的文档数量的组合打印计数。这是匹配操作的一个条件,根据 cat_type 获取所有文档,如果 cat_type 不存在,则在类别响应计数中显示为 0 样本数据:
[
{
"cat_id":1,
"categoryCode":"categoryCode1",
"categoryName":"categoryName1",
"cat":[
{
"type":"A"
},
{
"type":"B"
},
{
"type":"C"
}
]
},
{
"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"
}
]
}
]
预期输出:此处与 type='A' 匹配,category1 和 category3 具有 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
}
]
我正在使用查询-但查询与外部字段一起工作,但不适用于基于数组的条件
db.collection.aggregate([
{
"$group":{
"_id":{
"categoryCode":"$categoryCode",
"categoryName":"$categoryName"
},
"catCount":{
"$sum":{
"$cond":{
"if":{
"$eq":[
"$cat.type",
"A"
]
},
"then":1,
"else":0
}
}
}
}
},
{
"$project":{
"categoryCode":"$_id.categoryCode",
"categoryName":"$_id.categoryName",
"catCount":1,
"_id":0
}
}
])
【问题讨论】:
-
您只需要在
$group之前添加一个$unwind?喜欢this? -
如果你展开然后按 cat_type 计数值重复。但我需要基于重复文档的计数值,因为 cat_type 是数组并且它会增加计数
标签: mongodb mongoose mongodb-query aggregation-framework spring-data-mongodb