2017-12-26 12 views
0

あなたはMongoDBの中で私のユーザーコレクションの次のドキュメントがあるとします。MongoDBのコレクションに(他のすべてを含まなければならない)共通の属性に加えて、ネストされた配列要素から(基準に基づいて)特定の値を取得

{ 
_id: 1, 
zipcode: "63109", 
students: [ 
       { name: "john", school: 102, age: 10 }, 
       { name: "jess", school: 102, age: 11 }, 
       { name: "jeff", school: 108, age: 15 } 
      ] 
} 
{ 
_id: 2, 
zipcode: "63110", 
students: [ 
       { name: "ajax", school: 100, age: 7 }, 
       { name: "achilles", school: 100, age: 8 }, 
      ] 
} 
{ 
_id: 3, 
zipcode: "63109", 
students: [ 
       { name: "ajax", school: 100, age: 7 }, 
       { name: "achilles", school: 100, age: 8 }, 
      ] 
} 
{ 
_id: 4, 
zipcode: "63109", 
students: [ 
       { name: "barney", school: 102, age: 7 }, 
       { name: "ruth", school: 102, age: 16 }, 
      ] 
} 

ドゥクエリ:

db.user.find({ "students.name": "barney" }, { students: { $elemMatch: { name: "barney" } } }) 

は以下を返します:

{ 
    "_id" : "2", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
}, 
{ 
    "_id" : "3", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
} 

しかし、私はトンを必要としますoネストされた配列要素(「学生」)を名前(「ajax」)に基づいてフィルタリングし、各ドキュメントに存在する他のすべての属性も含めます。

例えば、私はあまりにも、以下に示すように、「郵便番号」などの共通の属性含めるように私の結果を期待しています:

{ 
    "_id" : "2", 
    "zipcode": "63110", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
}, 
{ 
    "zipcode": "63109", 
    "_id" : "3", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
} 

私はこれをどのように行うことができますか?

答えて

0

あなたはあなたの基準に照合し、それらを$unwindとする必要があり、通常の文書としてあなたのネストされた要素を扱いたい場合:

db.users.aggregate([ 
    { $unwind: "$students"}, 
    { $match: { "students.name": "ajax" }} 
]) 

例えば_idを持つドキュメントでリラックス:1は、3つの別々のドキュメントを作成します。学生の配列で単一要素で。

+0

それは働いた。ありがとう:) – saikumarb23

関連する問題