$ filter, если свойство не существует - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь отфильтровать массив с такой структурой:

{
          "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 ]

1 голос
/ 30 апреля 2019

Для решения этой проблемы мне пришлось использовать следующее условие:

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

Флаг false добился цели.Для получения дополнительной информации см. выпуск .

1 голос
/ 27 апреля 2019

$ ifNull позволяет вернуть значение по умолчанию, если первый аргумент равен нулю.Вам нужен только оператор $ ne , который можно использовать для сравнения _id с undefined

db.col.aggregate([
    {
        "$project": {
        "moreProp": "$moreProp" ,
        "ordenes": {
                "$filter": {
                    "input": "$ordenes",
                    "as": "orden",
                    "cond": { $ne: [ "$$orden._id", undefined ] }
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...