マングースクエリの.in()メソッドと.all()メソッドの違いは何ですか?簡単な例で説明していただけますか。
4 に答える
これがmongodb.orgからの説明です:
$ all
$all演算子は$inに似ていますが、指定された配列の値と一致する代わりに、配列のすべての値と一致する必要があります。たとえば、オブジェクト
{a:[1、2、3]}
と一致します
db.things.find({a:{$ all:[2、3]}});
だがしかし
db.things.find({a:{$ all:[2、3、4]}});
配列には、$all基準で指定された要素よりも多くの要素を含めることができます。$ allは、一致する必要のある要素の最小セットを指定します。
ここでmongodb演算子についてもっと読む
$all
演算子は、渡した値のサブセットを含むすべてのドキュメントを取得します。サブセットは任意の順序である可能性があります。
$in
演算子は、渡した値のいずれかを含むすべてのドキュメントを取得します。
たとえば、次のドキュメントを含むコレクション「スキル」について考えてみます。
{ "Name" : "Balaji", "skills" : [ "Dancing", "Cooking", "Singing" ] }
{ "Name" : "Ramesh", "skills" : [ "Cooking", "Singing" ] }
{ "Name" : "Suresh", "skills" : [ "Dancing", "Singing" ] }
db.skills.find({skills: { $all : ["Cooking", "Singing" ] } } )
バラジとラメッシュなど、料理と歌の両方のスキルを含むドキュメントのみが返されます。
db.skills.find({skills: { $in : ["Cooking", "Singing" ] } } )
すべてのドキュメントに料理または歌が含まれているため、すべてのドキュメントが返されます。
$all - This an array operator that is equivalent to an $and operation.
[
{name:'Shubham',hobbies:['cricket','dancing','football']},
{name:'Chandrakesha',hobbies:['cricket','singing','dancing','football']},
{name:'Nitish',hobbies:['cricket','singing','dancing','football']},
{name:'Lovish',hobbies:['readingbooks','singing','dancing','football']},
]
Query:->
{hobbies: { $all : ["readingbooks", "singing" ] } }
OR
can write like below query
{
$and: [
{"hobbies": "readingbooks"},
{"hobbies": "singing"},
]
}
will return only the documents which contains both readingbooks and singing hobbies
output:->
[
{name:'Lovish',hobbies:['readingbooks','singing','dancing','football']},
]
-------------------------------
$in operator retrieves all the documents which contains the either of the values we pass.
[
{name:'Shubham',hobbies:['cricket','dancing','football']},
{name:'Chandrakesha',hobbies:['cricket','singing','dancing','football']},
{name:'Nitish',hobbies:['cricket','singing','dancing','football']},
{name:'Lovish',hobbies:['readingbooks','singing','dancing','football']},
]
Query:->
{hobbies: { $in : ["readingbooks", "singing" ] } }
OR
can write like below query
{
$or: [
{"hobbies": "readingbooks"},
{"hobbies": "singing"},
]
}
will return all the documents which contains any of them readingbooks or singing hobbies
output:->
[
{name:'Chandrakesha',hobbies:['cricket','singing','dancing','football']},
{name:'Nitish',hobbies:['cricket','singing','dancing','football']},
{name:'Lovish',hobbies:['readingbooks','singing','dancing','football']},
]
次のコレクション「gamesapp」を検討してください
{
_id: ObjectId("7892de7a123be821ebcca757"),
name: "kid1",
games: [ "Chess", "Cricket", "Football", "Hockey", "Carrom" ],
favourite_games: [ "Chess", "Cricket", "Football" ]
}
{
_id: ObjectId("7892de7a123be821ebcca758"),
name: "kid2",
games: [ "Chess", "Cricket", "Football", "Hockey", "Carrom" ],
favourite_games: [ "Chess", "Cricket" ]
}
{
_id: ObjectId("7892de7a123be821ebcca759"),
name: "kid3",
games: [ "Chess", "Cricket", "Football", "Hockey", "Carrom" ],
favourite_games: [ "Chess" ]
}
{
_id: ObjectId("7892de7a123be821ebcca760"),
name: "kid4",
games: [ "Chess", "Cricket", "Football", "Hockey", "Carrom" ],
favourite_games: [ "Chess", "Cricket" ]
}
$all-これはAND演算と同等の配列演算子です。これは、指定された配列のすべての値と一致する場合、コレクションからドキュメントを返します。以下は、値が「チェス」「クリケット」の両方を持つすべてのドキュメントを判別するのに役立ちます。
db.gamesapp.find({"favourite_games":{$ all:["Chess"、 "Cricket"]}})
これは、ObjectId 7892de7a123be821ebcca757、7892de7a123be821ebcca758、および7892de7a123be821ebcca760のドキュメントを一覧表示するものとします。
$ in-これは、可能な条件をリストする配列に基づく比較クエリ演算子です。さまざまな値のクエリに役立ちますクエリで指定された配列に存在する値のいずれかに一致 するドキュメントを一覧表示します。以下は、値が「チェス」または「クリケット」であるすべてのドキュメントを判別するのに役立ちます。
db.gamesapp.find({"favourite_games":{$ in:["Chess"、 "Cricket"]}})
これには、ObjectId 7892de7a123be821ebcca757、7892de7a123be821ebcca758、7892de7a123be821ebcca759、および7892de7a123be821ebcca760のすべてのドキュメントが一覧表示されます。