我有两个密钥A和B,它们在文档中的存在是互斥的。当A存在时我必须按A分组,当B存在时我必须按B分组。所以我$project
将所需的值$group
到一个名为MyKey的计算密钥中,我将在其上执行
{$project: {MyKey: {$cond: [{$exists: ["$A", true]}, "$A", "$B"]}}}
。但看起来我的语法错了。我尝试用两种方式编写$ project:
{$project: {MyKey: {$cond: [{"A": {$exists:true}}, "$A", "$B"]}}}
和
{ "errmsg" : "exception: invalid operator '$exists'", "code" : 15999, "ok" : 0 } ...
但我一直收到错误:
{{1}}
出了什么问题?
答案 0 :(得分:36)
在$cond
:
$ifNull
代替$project
{ $project: {MyKey: {$ifNull: ['$A', '$B'] }}}
如果A
存在且不是null
,则会使用其值;否则使用B
的值。
答案 1 :(得分:20)
如果有人想在$ cond中检查$ exists,则替代方法是使用$ not 与$ cond
{$project: {MyKey: {$cond: [{$not: ["$A"]}, "$B", "$A"]}}}
和$ not的真值表是
希望有助于
答案 2 :(得分:9)
您可以使用
模拟存在=random_val(2)
如果定义了var
,则返回true答案 3 :(得分:3)
我在寻找类似问题的过程中找到了你的问题,但在找到钥匙的时候,我正在寻找我的参数。我终于解决了这个问题。
这是我用于 $ _ id.status 参数的内容,用于检查它是否存在于cond中。
$cond: [{
$or: [{
$ne: ["$_id.status", null]
}]
}, 1, null]
$或不需要。我把它留在那里......只是为了好玩。我认为它暂时不会影响查询。我稍后会测试速度。