2012-11-08 22 views
20

MongoDBコレクションに深くネストされたコレクションがあります。MongoDBの結果クエリをフラット化することは可能ですか?

db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0}) 

私はここに、このネストされた結果に終わる:私は次のクエリを実行すると

今すぐ

{"data" : { 
    "country" : [ 
    { 
     "neighbor" : [ 
     { 
      "name" : "Austria" 
     }, 
     { 
      "name" : "Switzerland" 
     } 
     ] 
    }, 
    { 
     "neighbor" : { 
     "name" : "Malaysia" 
     } 
    }, 
    { 
     "neighbor" : [ 
     { 
      "name" : "Costa Rica" 
     }, 
     { 
      "name" : "Colombia" 
     } 
     ] 
    } 
    ] 
}} 

を、これは私が欲しいものです:

['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia'] 

かこれは:

{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']} 

またはそれ以外のもの...これは可能ですか?

答えて

35

あなたはあなたの条件に結果近づくために$project & $unwind & $groupaggregationフレームワークを使用することができます。

$unwind名前配列がネストされているため、2回使用されます。また、neighbor属性が配列の場合にのみ機能します。あなたの例では、隣のフィールド(マレーシア)は配列ではありません

+0

ありがとう! '{" result ":[]、" ok ":1}':/ – Gevorg

+0

@Gevorg、回答を更新しました。 plsチェックアウト – RameshVel

+0

興味深い。それはまだ多くの仕事のように感じますが、私はそれに慣れなければならないと思います。ありがとう – Gevorg

0

新しいaggregation frameworkではかなり簡単です。 $ projectと$ unwind操作は、目的に合っています。

関連する問題