使用MongoDB的聚合框架可以project
操作的布尔值吗?
例如,给定一个像这样的输入文档:
{
"id": 123,
"data": [
{
"val": 1
},
{
"val": 2
},
{
"val": 3
},
{
"val": 4
},
{
"val": 5
}
]
}
操作为$data.val > 3
我想回复:
{
"result": [
{
"bool_val": 0
},
{
"bool_val": 0
},
{
"bool_val": 0
},
{
"bool_val": 1
},
{
"bool_val": 1
}
],
"ok": 1
}
这就是我提出的:
db.test.aggregate([{$match: {id: 123}},
{$unwind: "$data"},
{$project: {"bool_val": {"$data.val": {$gt: 3}}, _id: 0}}
])
产生以下错误:
aggregate failed: {
"errmsg": "exception: invalid operator '$data.val'",
"code": 15999,
"ok": 0
}
答案 0 :(得分:3)
您必须使用$cond
:
db.test.aggregate([
{
$match: {id: 123}
},
{
$unwind: "$data"
},
{
$project: {
"bool_val": {
$cond: [ {$gt: [ "$data.val", 3] }, 1, 0 ]
},
_id: 0
}
}
])
答案 1 :(得分:0)
作为参考,多个条件的语法是:
db.test.aggregate([
{
$match: {id: 123}
},
{
$unwind: "$data"
},
{
$project: {
"bool_val": { $cond: [ {$and: [{$gt: ["$data.val", 3]},
{$lte: ["$data.val", 5]} ]
}, 1, 0]},
_id: 0
}
}
])