Есть ли способ не использовать ключи $project с пустым массивом в конвейере агрегации mongodb?

Я получаю некоторые значения [] для некоторых возвращаемых результатов ключей, но я хочу сделать так, чтобы ключи со значениями [] вообще никогда не возвращались. Это должно быть в конвейере агрегации.

Ex:

{
"_id": "5e42fb9b74753bd02c86ca2c",
"key_one": 'something',
"key_two": 'another thing',
"key_three": [],
"key_four": [],
"key_five": 'one more time
}

Что я хочу вернуть:

{
 "_id": "5e42fb9b74753bd02c86ca2c",
"key_one": 'something',
"key_two": 'another thing',
"key_five": 'one more time
}

person Losercoder2345    schedule 30.09.2020    source источник


Ответы (1)


Используйте переменную $$REMOVE внутри этапа $project, чтобы удалить поле, если это пустой массив.

{
  $project: {
    key_three: {
      $cond: {
        if: {
          $ne: ["$key_three", []]
        },
        then: "$key_three",
        else: "$$REMOVE"
      }
    },
    key_four: {
      $cond: {
        if: {
          $ne: ["$key_four", []]
        },
        then: "$key_four",
        else: "$$REMOVE"
      }
    }
  }
}

person Lahiru Tennakoon    schedule 01.10.2020