$eq等価条件を指定します。
$eq演算子は、フィールドの値が指定された値と等しいドキュメントを一致させます。
互換性
次の環境でホストされる配置には $eq を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$eq演算子は次のような形をとります。
{ <field>: { $eq: <value> } }
$eq{ field: <value> }演算子は の形式と同等ですが、<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" ] } ]
埋め込みドキュメントのフィールドが一定の値と等しい
inventory次の例では、item.name フィールド値が に等しい"ab" コレクション内のすべてのドキュメントを選択しています。埋め込みドキュメントのフィールドで条件を指定するには、ドット表記を使用します。
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" ] } ]
配列要素が値と等しい
次の例では、値がinventory tags"B"[] となる要素を含む、1 配列に含まれる コレクション内のすべてのドキュメントを選択します。
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 stringに一致
暗黙的な一致を使用しても、
$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" } ]