聚合框架中的项目布尔值

Chr*_*our 3 mongodb nosql aggregation-framework

是否可以project使用 MongoDB 的聚合框架进行操作的布尔值?

例如,给定一个像这样的输入文档:

{
  "id": 123,
  "data": [
    {
      "val": 1
    },
    {
      "val": 2
    },
    {
      "val": 3
    },
    {
      "val": 4
    },
    {
      "val": 5
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

$data.val > 3我想返回的操作是:

{
  "result": [
    {
      "bool_val": 0
    },
    {
      "bool_val": 0
    },
    {
      "bool_val": 0
    },
    {
      "bool_val": 1
    },
    {
      "bool_val": 1
    }
  ],
  "ok": 1
}
Run Code Online (Sandbox Code Playgroud)

这就是我想出的:

db.test.aggregate([{$match: {id: 123}}, 
                   {$unwind: "$data"}, 
                   {$project: {"bool_val": {"$data.val": {$gt: 3}}, _id: 0}} 
                  ]) 
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

aggregate failed: {
  "errmsg": "exception: invalid operator '$data.val'", 
  "code": 15999,
  "ok": 0
} 
Run Code Online (Sandbox Code Playgroud)

hei*_*nob 6

你必须使用$cond

db.test.aggregate([
    {
        $match: {id: 123}
    }, 
    {
        $unwind: "$data"
    }, 
    {
        $project: {
            "bool_val": { 
                $cond: [ {$gt: [ "$data.val", 3] }, 1, 0 ]
            }, 
            _id: 0
        }
    } 
]) 
Run Code Online (Sandbox Code Playgroud)