2017-11-21 1 views
0

このmongoDBクエリの説明を提供してください。

db.inventory.find({ qty : { $all : [ { $elemMatch : { size: "M", num : { $gt : 40},color : "green" }} ,{ $elemMatch : { num :100 , color : "green"}} ]}}).pretty() 
+1

両方のクエリ演算子に関するドキュメントは優れています。 https://docs.mongodb.com/manual/reference/operator/query/all/とhttps://docs.mongodb.com/manual/reference/operator/query/elemMatch/ –

+0

このクエリは、 $ allで指定された条件の私が理解していることは、すべての条件を満たすすべての文書を収集することです。私が間違っているなら、私を修正してください。もっと明確にするために、私は出力ファイルを@AlexPと言います。 –

+0

清算はいつも良いです –

答えて

1

[OK]をので、私たちは、以下の文書を持っていると想像:

db.sample.find({ samplearray: { $elemMatch: { num: { $gt: 41 }}}}) 

ますR:

/* 1 */ 
{ 
    "_id" : ObjectId("5a148f114d8a2fe38bec772a"), 
    "samplearray" : [ 
     { 
      "size" : "M", 
      "num" : 45, 
      "color" : "black" 
     }, 
     { 
      "size" : "L", 
      "num" : 75, 
      "color" : "blue" 
     } 
    ] 
} 

ここsamplearrayは、2つのエントリ

このクエリを持っています文書を引用してください。

db.sample.find({ samplearray: { $elemMatch: { num: { $gte: 50 }, color: "black"}}}) 

それは何も返さないでください。クエリでは、numは、我々はこのクエリを実行する場合は今41

よりも大きい配列の値エントリを求めます。 $elemMatchは、それぞれ別々の配列値エントリを調べます。そして今、文書は一致しません。単一の配列では、両方の条件を満たす配列値エントリがないためです。

color: "black"ための1つ(例:

{ 
    "size" : "M", 
    "num" : 45, 
    "color" : "black" 
} 

) 、両方ではなくいずれかで:文書では、num: { $gte: 50 }

{ 
    "size" : "L", 
    "num" : 75, 
    "color" : "blue" 
} 

例)を満たすアレイエントリを有しています。私たちが紹介するのはここ

我々は結果として文書を取得したいならば、我々は問合せをリライトしなければならないとは、$all

db.sample.find({ 
    samplearray: { 
     $all: [{ 
       $elemMatch: { 
        num: { 
         $gte: 50 
        } 
       } 
      }, 
      { 
       $elemMatch: { 
        color: "black" 
       } 
      } 
     ] 
    } 
}) 

あなたが今$all$elemMatch少し理解しています少し良く?

+0

ありがとうございました! –

関連する問題