对于背景,如果要比较两个字段,则不能使用以下语法(因为它与文字字符串“ $ lastName”而不是$ lastName字段的内容进行比较):
"$match": { "firstName": { $ne : "$lastName"} }
我必须使用这个:
"$match": { "$expr": { $ne : [ "$firstName", "$lastName" ] } }
如果要测试字段是否存在,必须使用第一种格式:
"$match": { "fullName": { "$exists": true } }
我认为以后一种格式表示$ exists运算符的正确方法会引发错误:
db.docs.aggregate([
{
"$match": { "$expr": { "$exists": [ "$fullName", true ] } }
}
])
assert: command failed: {
"ok" : 0,
"errmsg" : "Unrecognized expression '$exists'",
"code" : 168,
"codeName" : "InvalidPipelineOperator"
} : aggregate failed
这是否意味着至少在某些情况下无法合并这些操作?具体来说,假设我想在 $ fullName $存在 OR $ firstName $ ne $ lastName的地方找到文档。可以表达出来吗?
答案 0 :(得分:5)
您将需要使用$or
逻辑运算符来完成此操作。
{
"$or": [
{
"$expr": {
"$ne": [
"$firstName",
"$lastName"
]
}
},
{
"fullName": {
"$exists": true
}
}
]
}
您上次查询失败,因为mongod认为$exists
是您要传递的$expr
运算符。