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
では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
| string | 検索するインデックス付きフィールド。 | はい |
| クエリする値。 | はい | |
| オブジェクト | 一致する検索タームの結果に割り当てる スコア 。 スコアを変更するには、次のいずれかのオプションを使用します。
クエリで | no |
スコアリングの動作
デフォルトでは、 equals
はconstant
スコアリングを使用します。 一致する各ドキュメントには1
のスコアが与えられます。
配列値をクエリする場合、配列内のクエリに一致する値の数に関係なく、Atlas Search は同じスコアを割り当てます。
スコアリングの例については、「 の例」セクションを参照してください。
例
次の例では、サンプルusers
コレクションを使用します。
サンプル コレクション
users
コレクションには次の 3 つのドキュメントが含まれています。
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" }, "region": [ { "type": "string" }, { "type": "stringFacet" } ] } } }
インデックス定義では、以下を指定します。
すべての動的にインデックス付け可能なフィールドを自動的にインデックス化します。
equals
演算子を使用したstring検索をサポートするために、name
フィールドをtoken
としてインデックス化します。region
string
string 検索をサポートする場合はstringFacet
facet
タイプとしてインデックス付けし、 検索をサポートする場合は フィールドとしてインデックスします。
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
を受け取ります。
メタデータの例
次のクエリは、$searchMeta
ステージを使用して、verified_users
users
コレクション内で が true であるリージョンの数を検索します。
db.users.aggregate([ { "$searchMeta": { "facet": { "operator": { "equals": { "path": "verified_user", "value": true } }, "facets": { "regionFacet": { "type": "string", "path": "region" } } } } } ])
[ { count: { lowerBound: Long('2') }, facet: { regionFacet: { buckets: [ { _id: 'East', count: Long('1') }, { _id: 'Southwest', count: Long('1') } ] } } } ]
次のクエリでは、$$SEARCH_META
集計変数を使用して、メタデータと の両方の検索結果を返し、users
コレクション内で verified_users
が true であるリージョンの数を検索します。
db.users.aggregate([ { "$search": { "facet": { "operator": { "equals": { "path": "verified_user", "value": true } }, "facets": { "regionFacet": { "type": "string", "path": "region" } } } } }, { "$limit": 2 }, { "$facet": { "docs": [ { "$project": { "type": 1, "description": 1 } } ], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } }, { "$set": { "meta": { "$arrayElemAt": ["$meta", 0] } } } ])
[ { docs: [ { _id: ObjectId('5ed698faa1199b471010d70c'), name: 'Jim Hall', region: 'East' }, { _id: ObjectId('5ed6990aa1199b471010d70d'), name: 'Ellen Smith', region: 'Southwest' } ], meta: { count: { lowerBound: Long('2') }, facet: { regionFacet: { buckets: [ { _id: 'East', count: Long('1') }, { _id: 'Southwest', count: Long('1') } ] } } } } ]