2016-04-12 9 views
0

私はmongodbの集約の概念が比較的新しいです。私の文書には配列があります。私は$ match、$ unwind、$ groupを使って配列内に2つの指定された値を持つドキュメントを取得しようとしました。私は、ライトアップが...ここにサンプルが文書の2つの配列要素に基づいて文書を返す方法はありますか?

文書で支援していないと思います。と「件名[ "物理学:これらの文書から

{Name:"Kal", Class: "2", Subject: ["Physics", "English", "Maths"]}, 
{Name:"Matt", Class: "1", Subject: ["Physics", "English"]}, 
{Name:"Kim",  Class: "1", Subject: ["Physics", "Spanish"]}, 
{Name:"Bud", Class: "2", Subject: ["Physics", "German"]}, 
{Name:"Roger", Class: "2", Subject: ["Physics", "French"]}, 
{Name:"Kate", Class: "1", Subject: ["English"]} 

を、私は「1級」を持つ文書をプルする必要があります"、" English "] '

私は自分のクエリ(または集約)を正しく書いているので、上から2番目のドキュメントを取り出す必要があります。ここで

は私が

db.Student.aggregate([{"$match": {"Class": "1",}},{"$unwind": "$Subject"},{"$match": {"Subject": "Physics"}},{"$match": {"Subject": "English"}} ]).pretty() 

だけでなく、上記の凝集が戻って私に何かを取得していないしているので、私は両方の「物理学」と「英語」を組み合わせるために$を使用してみましたが、私は「$を得たものですステージオペレータのエラーではありません。

私はこれも集計の下で試しましたが、私は何も得ていません。

db.Student.aggregate([{"$match": {"Class": "1",}},{"$match": {"Subject": ["Physics", "English"]}} ]).pretty() 

どうすればいいですか?

答えて

1

これを行うために集約フレームワークは必要ありません。 .find()メソッドを使用してください:

「物理」と「英語」が「件名」の配列のドキュメントを希望する場合は、$all演算子を使用する必要があります。のみ被験者が存在しているあなたが$size演算子を使用する必要がある文書を返すことが

db.Students.find({ "Subject": { "$all": [ "Physics", "English" ] } }) 

db.Students.find({ "Subject": { "$all": [ "Physics", "English" ] }, "Subject": { "$size": 2 } }) 
+0

ありがとうございます。それは期待どおりに動作します。 – JBone

関連する問題