MongoDB: разделение элементов внутри списка по документам

#mongodb #pymongo

Вопрос:

У меня есть мои предметы, находящиеся в коллекции, как показано ниже:

 {
  "_id": {
      "$oid": "6092037099edca65f29c09d0"
  }, 
  "items": [{"name": "item1"}, {"name": "item2"}, {"name": "item3"}]
}
 

Я хотел бы выполнить запрос, который возвращает отдельные элементы во всех коллекциях.

Ответ №1:

Вы можете использовать структуру агрегирования и Групповую операцию для получения отдельных элементов.

Во-первых, получите документы только с одним элементом вместо массива элементов. Затем сгруппируйте эти документы по элементам. Вы получите столько групп, сколько уникальных элементов в массивах существует. И, наконец, проецируйте _id_ поле групп на то, что вам нужно.

Вот пример запроса Mongo:

 db.collection.aggregate([
{
    $unwind: '$items'
},
{
    $group: {
        _id: "$items"
    }
},
{
    $project: {
        "_id": 0,
        "item": "$_id"
    }
}
])