mongodb - 如何根据 MOngoDB 聚合中的条件查找计数?
问题描述
我需要获取不同的 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
}
}
])
解决方案
只需要使用$in
运算符条件而不是$eq
运算符条件,
{
$group: {
_id: {
"categoryCode": "$categoryCode",
"categoryName": "$categoryName"
},
"cat_count": {
$sum: {
$cond: [{ $in: ["A", "$cat.type"] }, 1, 0]
}
}
}
}
推荐阅读
- tensorflow - 使用 BERT (TF 1.x) 保存的模型执行推理
- python - 梯度下降 - 作为列表和作为 numpy 数组的 theta 之间的区别
- java - 用于 DFA 最小化算法的 Java 中的 Pair 类的良好替代品?
- python - 使用 PyPlot 更新 Tkinter Canvas:非常奇怪的行为 - Python3
- c++ - 如何通过TCP接收多个文件并在C++中同时保存?
- r - 进行逻辑回归时如何绘制缺失的正态分布?
- linux - 如何重命名文件,谢谢
- scala - 在 Apache Spark 中,我有一个数据框,其中有一列包含字符串(它的日期),但月份和日期中缺少前导零
- matlab - 在 Matlab 单元格数组中操作值
- python - Visual Studio 对 Python 版本感到困惑