Как удалить пустую строку и массивы из объектов внутри массива? MongoDB Aggegation

#python #mongodb #mongodb-query #aggregation-framework #eve

#python #mongodb #mongodb-запрос #агрегация-фреймворк #eve

Вопрос:

Я хочу удалить пустые строки и пустые массивы в документе. Есть ли способ сделать это с помощью платформы агрегации MongoDB? Вот пример входящего документа:

 "item": [{
    "array_objects":[{
        "text": '',
        "second_text": '',
        "empty_array": [],
        "empty_array_2":[],
    }]
}]
  

Ответ №1:

Если вы хотите спроецировать все поля, которые не являются пустой строкой или пустым массивом, используйте $filter

Вы можете попробовать следующий запрос агрегации:

 db.collection.aggregate([
  {
    $unwind: "$item"
  },
  {
    $unwind: "$item.array_objects"
  },
  {
    $project: {
      item: {
        $arrayToObject: {
          $filter: {
            input: {
              $objectToArray: "$item.array_objects"
            },
            cond: {
              $and: [
                {
                  $ne: [
                    "$$this.v",
                    ""
                  ]
                },
                {
                  $ne: [
                    "$$this.v",
                    []
                  ]
                }
              ]
            }
          }
        }
      }
    }
  }
])
  

Игровая площадка MongoDB