2016-05-31 6 views
2

私はこの質問を投稿する前に十分に調査しましたが、正確な解決策を見つけることができませんでした。 私はだから私は、フィールドをグラッドている文書のみを返すようにしたい以下の構造にMongoDBサブディレクトリのクエリ配列

stname: "SC", 
dob : "1985", 
education {[ 
      {name : Lancaster, 
      year : 2013}, 

      {name : Manchester, 
      year : 2001, 
      grad : 2004}, 

      {name : Gambia, 
      year : 2001, 
      grad : 2011} 
     ]} 

を持っています。したがって、最後の2つの文書を返す必要があります。

Iは、以下に示すように、最初の文書はまた

{ 
    "_id" : ObjectId("574dd5fcbda73af19e361a3f"), 
    "name" : "SC", 
    "education" : [ 
     { 

     }, 
     { 
      "grad" : "2004" 
     }, 
     { 
      "grad" : "2011" 
     } 
    ] 
} 

空である以下のクエリはあなたに似た結果が得られるだけで最初に一致したものを、次のクエリを試みたが、無駄に

db.applicants.find({"education" : { $elemMatch : {"grad" : {$exists : true}}}}, {"name":1, "education.grad" : 1}).pretty() 

リターンそれは、これまでのgradフィールドが利用できない空のドキュメントです。

db.applicants.find({"education.grad" : { $exists : true}}, {"education.grad" : {$exists : true}, "education.grad" : 1, name : 1 , dob : 1}).pretty() 
+0

私はここに同様の質問に答えました:http://stackoverflow.com/questions/37510908/mongodb-search-by-datetime-type-not-working/37511250 – felipsmartins

+0

@felipsmartinsを、私は、彼らはかなり異なっていると思います彼はフィールドに基づいて照会しようとしていました。 – fanbondi

+0

ああ、そうだ。私は集計を使用しなければならないと思います。 – felipsmartins

答えて

1

UPDATEのANSWER:

db.applicants.aggregate({$unwind: "$education"}, 
{$match: {"education.grad":{$exists: true}}}, 
{$project: {"education.name": 1, "education.grad": 1, "_id": 0}}) 

これは、2つのレコードが、ない空の文書を返します。

+0

これは上記の私の質問と同じ結果を与えます。あなたは今までどこの学位をも取得できない空の書類を持っています。 – fanbondi

+0

@ファンボンディはとても奇妙です。私はあなたの文書を作り直して、あなたと同じ質問を書こうとしましたが、あなたが投稿したのと同じ結果を得ていませんでした。私は何かが欠けていると思います。明らかにするために、私はあなたの質問を使って空の文書を取得していませんでした。 – Tiramisu

+0

ええとこれは興味深いです。何が問題なのでしょう。私はMongo 3.2.5を使用しています。あなたはどのバージョンを使用していますか? db.version()は結果を返します。 – fanbondi

関連する問題