MongoDBでは、$in クエリ演算子は、フィールドの値が指定された配列の任意の値と等しいドキュメントを選択します。
$in クエリ演算子を$inと混同しないでください 指定された値が配列にあるかどうかを示すブール値を返す集約パイプライン演算子。
例
productsというコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 4, "prod" : "Shirt", "sizes" : "M" }
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
$inを使用できます 特定の_idを持つドキュメントのみを選択する演算子 値。
コード例:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
}) 結果:
{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
この場合、_idを含むドキュメントのみが必要でした。 1の値 、2 、または3 。
例2
別の例を示します。今回は$inを使用します 別のフィールドに対して。
db.products.find({
sizes: { $in: [ "L" ] }
}) 結果:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
この例では、$inを適用しました sizesに 分野。
この場合、最初のドキュメントには文字列としての値があり、他の2つのドキュメントには配列要素としての値がありました。いずれにせよ、一致するすべてのドキュメントが返されました。
さまざまなタイプの比較は、BSONの比較順序に従って評価されます。
集計例
$matchを使用する場合も、同じ構文を使用できます。 集約パイプライン演算子。
コード例:
db.products.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } }
]
) 結果:
{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
そして、ここでもsizesをクエリしている間です フィールド:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
) 結果:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] } 正規表現
/pattern/の形式を使用して、クエリで正規表現を使用できます。 。
例:
db.products.find({
sizes: { $in: [ /^X/ ] }
}) 結果:
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
この例では、sizesを持つすべてのドキュメントを返します Xで始まる文字列のいずれかである値を持つフィールド または、要素の少なくとも1つがXで始まる配列 。