$eq等価条件を指定します。
$eq演算子は、フィールドの値が指定された値と等しいドキュメントを一致させます。
互換性
次の環境でホストされる配置には $eq を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$eq演算子は次のような形をとります。
{ <field>: { $eq: <value> } }
$eq 演算子は、 <value> が正規式である場合を除き、 { field: <value> } 形式と同等です。以下で例をご覧ください。
動作
比較の順序
異なる BSON 型値の比較については、BSON 比較順序の指定を参照してください。
ドキュメントの値に一致
<value> がドキュメントの場合、ドキュメントのフィールドの順序が重要になります。
配列の値に一致する
<value> が配列の場合、MongoDB は <field> が配列に完全一致するか、または <field> に配列と完全一致する要素が含まれるドキュメントを一致させます。要素の順序は重要な意味を持ちます。例については、「配列の値に等しい」を参照してください。
正規表現に一致する
式 { field: <value> } は暗黙的に <value> との一致を指定します。MongoDB では暗黙的な一致はより明示的な形式に変換されます。
<value> が特定の文字列のように固定されている場合、その式は$eq 演算子{ field: { $eq: <value> } } を使用する場合と同等になります。
<value> が正規表現である場合、MongoDB はステートメントを展開して $regex 演算子 { field: { $regex: <value> } } を使用します。
例については、「正規表現一致動作」を参照してください。
セキュリティへの影響
悪意を持って作成されたクエリで問題が発生しないように、ユーザーからの入力には必ず明示的な形式 { field: { $eq: <value> } } を使用してください。
例
この例では、inventory コレクションを使用しています。
db.inventory.insertMany( [ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ] )
指定された値に等しい
この例では、qty フィールド値が 20 に等しい inventory コレクションのすべてのドキュメントを選択します。
db.inventory.find( { qty: { $eq: 20 } } )
このクエリは下記と同等です。
db.inventory.find( { qty: 20 } )
どちらのクエリも、次のドキュメントと一致します。
[ { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ]
埋め込みドキュメントのフィールドが一定の値と等しい
次の例では、item.name フィールド値が "ab" に等しい inventory コレクションのすべてのドキュメントを選択します。埋め込みドキュメントのフィールドで条件を指定するには、ドット表記を使用します。
db.inventory.find( { "item.name": { $eq: "ab" } } )
このクエリは下記と同等です。
db.inventory.find( { "item.name": "ab" } )
どちらのクエリも次のドキュメントと一致します。
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] } ]
配列要素が値と等しい
次の例では、tags 配列に値が "B" [1] の要素が含まれる inventory コレクションのすべてのドキュメントを選択します。
db.inventory.find( { tags: { $eq: "B" } } )
このクエリは下記と同等です。
db.inventory.find( { tags: "B" } )
どちらのクエリも、次のドキュメントと一致します。
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] } ]
| [1] | このクエリは、 tags フィールドの値が文字列"B" となるドキュメントにも一致します。 |
配列の値に等しい
この例では、tags 配列が指定した配列と同等であるか、配列 [ "A", "B" ] と同等の要素が含まれている inventory コレクションのすべてのドキュメントを選択します。
db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
このクエリは下記と同等です。
db.inventory.find( { tags: [ "A", "B" ] } )
どちらのクエリも、次のドキュメントと一致します。
[ { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ]
正規表現一致の動作
次の例では、暗黙的と明示的な正規表現の一致の違いを示しています。以下のドキュメントを含むコレクションについて検討します。
db.companies.insertMany( [ { _id: 001, company: "MongoDB" }, { _id: 002, company: "MongoDB2" } ] )
- $eq 文字列に一致
暗示的な一致を使用しても、
$eqを明示的に使用しても、文字列は同じ値を返します。次のクエリは同じ結果を返します。db.collection.find( { company: "MongoDB" }, {_id: 0 }) db.collection.find( { company: { $eq: "MongoDB" } }, {_id: 0 } ) 結果は次のとおりです。
[ { company: "MongoDB" } ] - 正規表現での一致 $eq
$eqと正規表現を使用する明示的なクエリは、正規表現でもあるオブジェクトのみと一致します。この例のクエリでは、companyフィールドの値が文字列であるため、結果が返されません。db.companies.find( { company: { $eq: /MongoDB/ } }, {_id: 0 } ) - 正規表現の一致
正規式に対して暗黙的に一致するクエリは、
$regex演算子を使用するクエリと同等です。次のクエリは同じ結果を返します。db.companies.find( { company: /MongoDB/ }, {_id: 0 }) db.companies.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } ) 結果は以下のとおりです。
[ { company: "MongoDB" }, { company: "MongoDB2" } ]