我有一个名为INFODOCS的集合,其中有一个名为PROCESSOR_ID和STATUS(True/False/Null)的字段。
- Working_Processor =状态不为空的不同处理器ID的计数
1.总处理器=不同处理器ID的计数
信息文档
[
{
"_id": "1",,
"PROCESSOR_ID" : "11",
"STATUS" : "True"
},
{
"_id": "2",
"PROCESSOR_ID" : "11",
"STATUS" : ""
},
{
"_id": "3",
"PROCESSOR_ID" : "22",
"STATUS" : "False"
},
{
"_id": "4",
"PROCESSOR_ID" : "33",
"STATUS" : ""
}
]
这里的预期答案是:正在工作的处理器= 2(ID:1和ID:3)处理器总数= 3
我试着使用$addToSet和$cond,但想知道是否有更好的方法来实现相同的效果。
[
{
'$group': {
'_id': None,
'WORKING_PROCESSOR': {
'$addToSet': {
'$cond': [
{
'$ne': [
'$STATUS', ''
]
}, '$PROCESSOR_ID', None
]
}
},
'TOTAL_PROCESSOR': {
'$addToSet': '$PROCESSOR_ID'
}
}
}, {
'$project': {
'_id': 0,
'WORKING_PROCESSOR': {
'$subtract': [
{
'$size': '$WORKING_PROCESSOR'
}, 1
]
},
'TOTAL_PROCESSOR': {
'$size': '$TOTAL_PROCESSOR'
}
}
}
]
1条答案
按热度按时间jmp7cifd1#
一个简单的选择是:
了解它在playground example上的工作原理