$ filter如果属性不存在

时间:2019-04-27 14:42:14

标签: mongodb aggregation-framework

我正在尝试过滤具有以下结构的数组:

{
          "ordenes": [
            {
              "_id": "XXXX",
              "prop0": [{}],
              "prop1": [],
              "prop2": {},
              "prop3": {}
            },
            {
                "prop0": [{}],
                "prop1": [],
                "prop2": {},
                "prop3": {}
            }
          ]
}

输入以下代码:

{
    "$project": {
       "moreProp": "$moreProp" ,
       "ordenes": {
            "$filter": {
               "input": "$ordenes",
               "as": "orden",
               "cond": { "$ifNull": ["$$orden._id", true] }
            }
        }
    }
}

我需要忽略数组中不具有属性_id的元素,但是它似乎无法与上面的代码一起使用。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

$ifNull如果第一个参数为null,则允许您返回默认值。您只需要$ne运算符即可将_idundefined

进行比较
db.col.aggregate([
    {
        "$project": {
        "moreProp": "$moreProp" ,
        "ordenes": {
                "$filter": {
                    "input": "$ordenes",
                    "as": "orden",
                    "cond": { $ne: [ "$$orden._id", undefined ] }
                }
            }
        }
    }
])

答案 1 :(得分:0)

要解决此问题,我必须使用以下条件:

{ $ifNull: ['$$orden._id', false]}

false标志可以解决问题。有关更多信息,请参见此issue