通过使用 $cond 来确定一些东西,但为什么 $cond 总是为真?
By using $cond to determine something, but why $cond is always true?
我试图找到不包含 key 和 low 字段的文档总数。但它总是 returns true 并且结果是文档总数。
确实存在这样的文档不包含这两个字段。
这是我试过的代码:
db.test.aggregate([
{ "$group": {
"_id" : { user_id: "$id" },
"a": {
"$sum": {
"$cond": [ {
$and:[{low:null},{ key:null}]
} , 1, 0
]
}
},
"b": { "$sum": {
"$cond": [ { "$ifNull": ["$key", false] }, 1, 0 ]
} },
"c": { "$sum": {
"$cond": [ { "$ifNull": ["$low", false] }, 1, 0 ]
} },
} },
{ "$project": {
"_id": 0,
"a": 1,
"b": 1,
"c": 1
} }
])
在 $cond
表达式中您需要使用聚合运算符,而不是查询语法。
而不是 {low:null}
使用 {$eq:["$low",null]}
,key
测试也是如此。
我试图找到不包含 key 和 low 字段的文档总数。但它总是 returns true 并且结果是文档总数。 确实存在这样的文档不包含这两个字段。
这是我试过的代码:
db.test.aggregate([ { "$group": { "_id" : { user_id: "$id" }, "a": { "$sum": { "$cond": [ { $and:[{low:null},{ key:null}] } , 1, 0 ] } }, "b": { "$sum": { "$cond": [ { "$ifNull": ["$key", false] }, 1, 0 ] } }, "c": { "$sum": { "$cond": [ { "$ifNull": ["$low", false] }, 1, 0 ] } }, } }, { "$project": { "_id": 0, "a": 1, "b": 1, "c": 1 } } ])
在 $cond
表达式中您需要使用聚合运算符,而不是查询语法。
而不是 {low:null}
使用 {$eq:["$low",null]}
,key
测试也是如此。