我试图在mongo管道中执行以下操作 -
{ $project: {
newAttribute: {
$cond: [
{ $exists: { '$myAttribute': true } },
1,
0
]
}
}}
然而,这会引发错误 -
Error: command failed: {
"errmsg" : "exception: invalid operator '$exists'",
"code" : 15999,
"ok" : 0
}
我可以看到有人试图做类似的事情here,但$ifNull
对我没有帮助,因为我希望值为1,而不是myAttribute
字段的值
有解决这个问题的好方法吗?
答案 0 :(得分:3)
如果您的MongoDB服务器版本是3.2或更高版本,您可以使用$allElementsTrue
或$anyElementTrue
:
db.collection.aggregate([
{ "$project": {
"newAttribute": {
"$cond": [
{ "$anyElementTrue": [ [ "$myAttribute" ] ] },
1,
0
]
}
}}
])
从MongoDB版本< = 3.0,您始终可以依赖$ifNull
运算符来检查该字段是否存在,然后使用$cond
运算符相应地设置值。
db.collection.aggregate([
{ "$project": {
"newAttribute": {
"$cond": [
{ "$eq": [
{ "$ifNull": [ "$myAttribute", 99999 ] },
99999
]},
0,
1
]
}
}}
])