2016-06-14 8 views
3

invoice collectionがあります。指定したブックのIDを持つドキュメントを探したいと思います。

db.invoice.find({"sold": {$elemMatch: {"book":{$elemMatch:{"_id":"574e68e5ac9fbac82489b689"}}}}}) 

私はこれを試してみましたが、それは

{ 
    "_id" : ObjectId("575e9bf5576533313ac9d993"), 
    "sold" : [ 
     { 
      "book" : { 
       "_id" : "574e68e5ac9fbac82489b689", 
       "price" : 100, 
      }, 
      "quantity" : 10, 
      "total_price" : 1000 
     } 
    ], 
    "date" : "13-06-2016" 
} 

答えて

0

https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch

を動作しませんでした$ elemMatchオペレータが一致した少なくとも一つの要素を持つ配列フィールドを含む文書にマッチしますすべての指定されたクエリ基準。

mongo> db.invoice.find({"sold": {$elemMatch: {"book._id":"574e68e5ac9fbac82489b689"}}}).pretty() 
{ 
    "_id" : ObjectId("575e9bf5576533313ac9d993"), 
    "sold" : [ 
     { 
      "book" : { 
       "_id" : "574e68e5ac9fbac82489b689", 
       "price" : 100 
      }, 
      "quantity" : 10, 
      "total_price" : 1000 
     } 
    ], 
    "date" : "13-06-2016" 
} 
+1

を使用する必要はありません'$ elemMatch'を不必要に使用しています。 '{'sold.book._id': '574e68e5ac9fbac82489b689'}'クエリは正常に動作します。 – Shrabanee

3

あなたが唯一つだけクエリ条件を指定するので、あなたはここに$elemMatchクエリ演算子は必要ありません。

db.invoice.find({ 'sold.book._id': '574e68e5ac9fbac82489b689' }) 

これは、ドキュメントに記載されています

あなたは$ elemMatch式にのみ単一の条件を指定した場合、あなたは私がクエリを考える$ elemMatch

関連する問題