equals
項目一覧
定義
equals
equals
演算子は、フィールドが指定された値と一致するかどうかを確認します。equals
は次のデータ型のクエリをサポートしています。equals
演算子を使用して、配列内のブール値、ObjectId、数値、日付、文字列(token
型としてインデックス付き)をクエリできます。 配列内の少なくとも 1 つの要素がequals
演算子の「値」フィールドと一致する場合、Atlas Search はそのドキュメントを結果セットに追加します。注意
equals
演算子は 15 桁の 10 進数までの数値をサポートします。 ドキュメントまたはクエリに小数点が追加されると、精度の問題やクエリの不正確性が生じる可能性があります。
構文
equals
の構文は次のとおりです。
{ $search: { "index": <index name>, // optional, defaults to "default" "equals": { "path": "<field-to-search>", "value": <boolean-value>|<objectId>|<number>|<date>|<string>, "score": <score-options> } } }
オプション
equals
では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
path | string | 検索するインデックス付きフィールド。 | はい |
value | クエリする値。 | はい | |
score | オブジェクト | 一致する検索タームの結果に割り当てる スコア 。 スコアを変更するには、次のいずれかのオプションを使用します。
クエリで | no |
スコアリングの動作
デフォルトでは、 equals
はconstant
スコアリングを使用します。 一致する各ドキュメントには1
のスコアが与えられます。
配列内の値をクエリする場合、Atlas Search は、クエリに一致した配列内の値の数に基づいて、一致結果のスコアを変更しません。配列内の一致の数に関係なく、スコアは単一の一致と同じになります。
スコアリングの例については、「 の例」セクションを参照してください。
例
サンプル コレクション
このページの例では、次の 3 つのドキュメントを含むusers
という名前のコレクションを使用します。
注意
次の例ではJavaScript形式を使用します。 これらのドキュメントをこの形式で追加するには、 mongosh
を使用します。 Atlas UI には JSON形式が必要です。
db.users.insertMany([ { "_id" : ObjectId("5ed698faa1199b471010d70c"), "name" : "Jim Hall", "verified_user" : true, "account" : { "new_user" : true, "active_user" : true }, "teammates" : [ ObjectId("5ed6990aa1199b471010d70d"), ObjectId("59b99dbdcfa9a34dcd7885c8") ], "region" : "East", "account_created" : ISODate("2021-12-12T10:18:27.000+00:00"), "employee_number" : 257, "uuid" : UUID("fac32260-b511-4c69-8485-a2be5b7dda9e"), "job_title": "engineer" }, { "_id" : ObjectId("5ed6990aa1199b471010d70d"), "name" : "Ellen Smith", "verified_user" : true, "account" : { "new_user" : false, "active_user" : true }, "teammates" : [ ObjectId("5a9427648b0beebeb69537a5"), ObjectId("59b99dbdcfa9a34dcd7881d1") ], "region" : "Southwest", "account_created" : ISODate("2022-05-04T05:01:08.000+00:00"), "employee_number" : 258, "job_title": null }, { "_id" : ObjectId("5ed6994fa1199b471010d70e"), "name" : "Fred Osgood", "verified_user" : false, "account" : { "new_user" : false, "active_user" : false }, "teammates" : [ ObjectId("5a9427648b0beebeb69589a1"), ObjectId("59b99dbdcfa9a34dcd7897d3") ], "region" : "Northwest", "account_created" : ISODate("2022-01-19T08:22:15.000+00:00"), "employee_number" : 259, "job_title": null } ])
{ "_id" : ObjectId("5ed698faa1199b471010d70c"), "name" : "Jim Hall", "verified_user" : true, "account" : { "new_user" : true, "active_user" : true }, "teammates" : [ ObjectId("5ed6990aa1199b471010d70d"), ObjectId("59b99dbdcfa9a34dcd7885c8") ], "region" : "East", "account_created" : ISODate("2021-12-12T10:18:27.000+00:00"), "employee_number" : 257, "uuid" : UUID("fac32260-b511-4c69-8485-a2be5b7dda9e"), "job_title": "engineer" }
{ "_id" : ObjectId("5ed6990aa1199b471010d70d"), "name" : "Ellen Smith", "verified_user" : true, "account" : { "new_user" : false, "active_user" : true }, "teammates" : [ ObjectId("5a9427648b0beebeb69537a5"), ObjectId("59b99dbdcfa9a34dcd7881d1") ], "region" : "Southwest", "account_created" : ISODate("2022-05-04T05:01:08.000+00:00"), "employee_number" : 258, "job_title": null }
{ "_id" : ObjectId("5ed6994fa1199b471010d70e"), "name" : "Fred Osgood", "verified_user" : false, "account" : { "new_user" : false, "active_user" : false }, "teammates" : [ ObjectId("5a9427648b0beebeb69589a1"), ObjectId("59b99dbdcfa9a34dcd7897d3") ], "region" : "Northwest", "account_created" : ISODate("2022-01-19T08:22:15.000+00:00"), "employee_number" : 259, "job_title": null }
サンプル インデックス
users
コレクションは、次のインデックス定義でインデックス付けされます。
{ "mappings": { "dynamic": true, "fields": { "name": { "type": "token", "normalizer": "lowercase" } } } }
インデックス定義では、以下を指定します。
すべての動的にインデックス付け可能なフィールドを自動的にインデックス化します。
equals
演算子を使用したstring検索をサポートするために、name
フィールドをtoken
としてインデックス化します。
Atlas Search インデックスの作成方法については、「 Atlas Search インデックスの作成 」を参照してください。
基本的なクエリの例
ブール値の例
次の例では、 equals
演算子を使用して、 users
コレクションからverified_user
フィールドがtrue
に設定されているドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "verified_user", "value": true } } }, { "$project": { "name": 1, "_id": 0, "score": { "$meta": "searchScore" } } } ])
上記のクエリは、次の結果を返します。
{ "name" : "Jim Hall", "score" : 1 } { "name" : "Ellen Smith", "score" : 1 }
「Jim Hall」と「Ellenpass のドキュメントはそれぞれverified_user
フィールドがtrue
に設定されているため、スコアが1
になります。
次の例では、 equals
演算子を使用して、 users
コレクション内でaccount.new_user
フィールドにブール値true
が含まれるドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "account.new_user", "value": true } } } ])
上記のクエリでは「Jim Hall」のドキュメントが返されます。このドキュメントにはaccount
オブジェクトに"new_user": true
が含まれているためです。
ObjectId の例
次の例では、 equals
演算子を使用して、 users
コレクションからteammates
フィールドに値ObjectId("5a9427648b0beebeb69589a1")
が含まれるドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "teammates", "value": ObjectId("5a9427648b0beebeb69589a1") } } } ])
上記のクエリでは「Fred Opsread」のドキュメントが返されます。このドキュメントでは、 teammates
配列にObjectId("5a9427648b0beebeb69589a1")
が含まれているためです。
日付の例
次の例では、 equals
演算子を使用して、 users
コレクションからaccount_created
フィールドにISODate("2022-05-04T05:01:08.000+00:00")
と一致する値が含まれているドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "account_created", "value": ISODate("2022-05-04T05:01:08.000+00:00") } } } ])
上記のクエリでは「Ellen Schema」のドキュメントが返されます。このドキュメントには"account_created":
2022-05-04T05:01:08.000+00:00
が含まれているためです。
数値の例
次の例では、 equals
演算子を使用して、 users
コレクションからemployee_number
フィールドに259
と一致する値が含まれているドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "employee_number", "value": 259 } } } ])
上記のクエリでは「Fred Opsread」のドキュメントが返されます。このドキュメントには"employee_number":
259
が含まれているためです。
string例
次の例では、 equals
演算子を使用して、 users
コレクションからname
フィールドにJim Hall
と一致する値が含まれているドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "name", "value": "jim hall" } } } ])
上記のクエリでは「Jim Hall」のドキュメントが返されます。このドキュメントではname
フィールドにJim Hall
が含まれているためです。 Atlas Search は、 name
フィールドのインデックス定義で指定されているように、タームを小文字に正規化するため、小文字のクエリをドキュメント内の大文字の値と照合します。
UUID の例
次の例では、 equals
演算子を使用して、 users
コレクションから特定の UUID と一致する値がuuid
フィールドに含まれているドキュメントを検索します。
db.users.aggregate([ { "$search": { "equals": { "path": "uuid", "value": UUID("fac32260-b511-4c69-8485-a2be5b7dda9e") } } } ])
上記のクエリでは「Jim Hall」のドキュメントが返されます。このドキュメントでは、 uuid
フィールドに指定された UUID が含まれているためです。
null の例
次の例では、 equals
演算子を使用して、 users
コレクションからjob_title
フィールドに null 値が含まれているドキュメントを検索します。
db.users.aggregate([ { $search: { "equals": { "path": "job_title", "value": null } } } ])
上記のクエリでは、「Ellen Bridge」とFred Osgood
のドキュメントが返されます。ドキュメントはjob_title
フィールドに null 値を含むためです。
複合サンプル クエリ
次の例では、複合演算子をmust
、 mustNot
、およびequals
と組み合わせて使用し、 region
フィールドがSouthwest
で、かつverified_user
フィールドがfalse
ではないドキュメントを検索します。
db.users.aggregate([ { "$search": { "compound": { "must": { "text": { "path": "region", "query": "Southwest" } }, "mustNot": { "equals": { "path": "verified_user", "value": false } } } } } ])
上記のクエリでは、コレクション内で検索条件を満たす唯一のユーザーである "Ellen Salmon" のドキュメントが返されます。
次のサンプル クエリには、これらの検索条件があります。
verified_user
フィールドはtrue
に設定する必要があります次のいずれか 1 つ を満たす必要があります。
teammates
配列には値ObjectId("5ed6990aa1199b471010d70d")
が含まれていますregion
フィールドはNorthwest
に設定されています
db.users.aggregate([ { "$search": { "compound": { "must": { "equals": { "path": "verified_user", "value": true } }, "should": [ { "equals": { "path": "teammates", "value": ObjectId("5ed6990aa1199b471010d70d") } }, { "text": { "path": "region", "query": "Northwest" } } ], "minimumShouldMatch": 1 } } }, { "$project": { "name": 1, "_id": 0, "score": { "$meta": "searchScore" } } } ])
上記のクエリは、次の結果を返します。
{ "name" : "Jim Hall", "score" : 2 }
「Jim Hall」のドキュメントは、 must
句と 2 つのshould
句のうちの最初の句の要件を満たしているため、スコア2
を受け取ります。
複合クエリを使用して複数の ObjectID を検索できます。 次のクエリの例では、 compound
演算子とshould
句を使用して 3 つの異なる ObjectID を検索しています。クエリを満たすには、少なくとも 2 つが表示される必要があります。
db.users.aggregate([ { "$search": { "compound": { "should": [ { "equals": { "path": "teammates", "value": ObjectId("5a9427648b0beebeb69537a5") } }, { "equals": { "path": "teammates", "value": ObjectId("59b99dbdcfa9a34dcd7881d1") } }, { "equals": { "path": "teammates", "value": ObjectId("5a9427648b0beebeb69579d0") } } ], "minimumShouldMatch": 2 } } }, { "$project": { "name": 1, "_id": 0, "score": { "$meta": "searchScore" } } } ])
上記のクエリは、次の結果を返します。
{ "name" : "Ellen Smith", "score" : 2 }
「Ellen Bridge」のドキュメントは、 teammates
配列に指定された ObjectID の 2 つが含まれているため、スコア2
を受け取ります。