2016-07-05 4 views
2

я такая схема в MongoDBКак получить массив из коллекции mongoDB?

{ 
    "key":"ru", 
    "regions":[ 
     { 
      "name":"moskovskaya", 
      "cities":[ 
       { 
        "name":"moskva" 
       }, 
       { 
        "name":"tula" 
       } 
      ] 
     }, 
     { 
      "name":"piterskaya", 
      "cities":[ 
       { 
        "name":"piter" 
       }, 
       { 
        "name":"luga" 
       } 
      ] 
     } 
    ] 
} 

у меня есть некоторые документы такой схемы для разных стран, как я могу получить массив всех городов из каждого документа этой схемы?

ответ

1

Выполните следующую агрегацию трубопровода:

db.collection.aggregate([ 
    { "$unwind": "$regions" }, 
    { "$unwind": "$regions.cities" }, 
    { 
     "$group": { 
      "_id": null, 
      "cities": { "$push": "$regions.cities.name" } 
     } 
    } 
]) 

Пример вывода

{ 
    "result" : [ 
     { 
      "_id" : null, 
      "cities" : [ 
       "moskva", 
       "tula", 
       "piter", 
       "luga" 
      ] 
     } 
    ], 
    "ok" : 1 
} 
+1

Спасибо большое, вы про)) –

+1

'различны()' будет работать красиво. – styvane

+0

@SSDMS Awesome! – chridam

2

Это простой запрос. Метод distinct() прекрасно выполнит эту работу.

db.collection.distinct("regions.cities.name") 

, который производит:

[ "luga", "moskva", "piter", "tula" ] 
Смежные вопросы