Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

$eq

項目一覧

  • 互換性
  • 構文
  • 動作
$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> が正規表現の場合、ステートメントは $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" ] }
] )

次の例では、 inventory コレクションに対してクエリを実行し、 qty フィールドの値が 20と等しいすべてのドキュメントを選択します。

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" ] } ]

Tip

以下も参照してください。

次の例では、inventory コレクションに対してクエリを実行し、値が"B"[1] となる要素を tags 配列に含むすべてのドキュメントを選択します。

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" ] }
]

Tip

以下も参照してください。

[1] このクエリは、 tags フィールドの値が文字列"B" となるドキュメントにも一致します。

次の例では、 inventory コレクションに対してクエリを実行し、 tags 配列が指定した配列と完全に等しいか、または tags 配列に配列 [ "A", "B" ] と等しい要素が含まれるすべてのドキュメントを選択します。

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" }
]

戻る

比較クエリ