このmongoDBクエリの説明を提供してください。
db.inventory.find({ qty : { $all : [ { $elemMatch : { size: "M", num : { $gt : 40},color : "green" }} ,{ $elemMatch : { num :100 , color : "green"}} ]}}).pretty()
このmongoDBクエリの説明を提供してください。
db.inventory.find({ qty : { $all : [ { $elemMatch : { size: "M", num : { $gt : 40},color : "green" }} ,{ $elemMatch : { num :100 , color : "green"}} ]}}).pretty()
[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
少し理解しています少し良く?
ありがとうございました! –
両方のクエリ演算子に関するドキュメントは優れています。 https://docs.mongodb.com/manual/reference/operator/query/all/とhttps://docs.mongodb.com/manual/reference/operator/query/elemMatch/ –
このクエリは、 $ allで指定された条件の私が理解していることは、すべての条件を満たすすべての文書を収集することです。私が間違っているなら、私を修正してください。もっと明確にするために、私は出力ファイルを@AlexPと言います。 –
清算はいつも良いです –