2016-07-05 20 views
2

は私が別の国のようなスキーマの一部の文書を持っているのMongoDBmongoDBコレクションから配列を取得する方法は?

{ 
    "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恐ろしい! – chridam

2

これは単純なクエリです。 distinct()メソッドは美しく仕事を終わらせます。

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

[ "luga", "moskva", "piter", "tula" ] 
関連する問題