定義
MongoDB Search の in 演算子は、指定されたパスで BSON number、date、boolean、objectId、uuid、またはstringの値を含む配列を検索し、フィールドの値が指定された配列内のいずれかの値と一致するドキュメントを返します。フィールドが配列を保持している場合、in 演算子は、その配列に指定された配列内のいずれかの値と一致する要素が少なくとも 1 つ含まれているドキュメントを選択します。
構文
in演算子の構文は次のとおりです。
{ $search: { "index": <index name>, // optional, defaults to "default" "in": { "path": "<field-to-search>", "score": <options>, "value": <single-or-array-of-values-to-search>, "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>] } }}フィールド
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| 文字列または複数の文字列の配列 | 必須 | |
| オブジェクト | 一致する検索タームの結果に割り当てる スコア 。 スコアを変更するには、次のいずれかのオプションを使用します。
| 任意 |
| 必須 | ||
| 文字列または複数の文字列の配列 | このクエリに基づいてカウントの再計算から除外するファセットまたはファセットのリスト。値は、 | 任意 |
例
次の例では、in 演算子を使用して、sample_analytics.カスタマー コレクション内のコレクションをクエリします。クラスターにサンプルデータをロードし、コレクションで 静的マッピング を使用する という名前の MongoDB Searchdefault インデックスを 作成 すると、コレクションに対して次のクエリを実行できます。
サンプル インデックス
サンプルのインデックス定義では、コレクション内のインデックス付きフィールドに対するin演算子クエリをサポートするために、次のアクションを指定します。
コレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックス化します。
nameフィールドをトークンタイプとして静的にインデックスし、フィールドのテキストを小文字に変換します。
{ "mappings": { "index": "default", "dynamic": true, "fields": { "name": { "normalizer": "lowercase", "type": "token" } } }}MongoDB Searchインデックスの作成方法については、 MongoDB Search インデックスの管理 を参照してください。
サンプル クエリ
次のクエリは、 in演算子を使用して、特定の日付に手順を実行したカスタマーを対象に、単一の 値を含むbirthdateフィールドで検索します。 クエリは、 $projectステージを使用して次の操作を実行します。
結果の
_idフィールドを省略します。namebirthdate結果には フィールドと フィールドのみが含まれます。
db.customers.aggregate([ { "$search": { "in": { "path": "birthdate", "value": [ISODate("1977-03-02T02:20:31.000+00:00"), ISODate("1977-03-01T00:00:00.000+00:00"), ISODate("1977-05-06T21:57:35.000+00:00")] } } }, { "$project": { "_id": 0, "name": 1, "birthdate": 1 } }])[ { name: 'Elizabeth Ray', birthdate: ISODate("1977-03-02T02:20:31.000Z") }, { name: 'Brad Cardenas', birthdate: ISODate("1977-05-06T21:57:35.000Z") }]MongoDB Search は、クエリで指定された日付に一致する 2 つのドキュメントを返します。
次のクエリでは、 in演算子を使用して、アカウント番号371138 、 371139 、または371140を持つカスタマーに対して、番号の配列を含むaccountsフィールドをクエリします。 クエリは、 $projectステージを使用して次の操作を実行します。
結果の
_idフィールドを省略します。nameaccounts結果には フィールドと フィールドのみが含まれます。
db.customers.aggregate([ { "$search": { "in": { "path": "accounts", "value": [371138, 371139, 371140] } } }, { "$project": { "_id": 0, "name": 1, "accounts": 1 } }])[ { name: 'Elizabeth Ray', accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] }]MongoDB Search では、クエリで指定されたアカウント番号 371138 に一致するドキュメントが 1 つだけ返されます。
次のクエリは、 text演算子を使用して、 nameフィールドに最初の名前がJamesであるカスタマーをクエリします。 クエリは、 in _idフィールドの指定された ObjectId に関連付けられたカスタマーの優先順位を指定します。 クエリは、 $limitステージを使用して出力を5の結果に制限し、 $projectステージを使用して次のようにします。
_idname結果には フィールドと フィールドのみが含まれます。scoreという名前のフィールドを結果に追加する。
db.customers.aggregate([ { "$search": { "compound": { "must": [{ "in": { "path": "name", "value": ["james sanchez", "jennifer lawrence"] } }], "should": [{ "in": { "path": "_id", "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")] } }] } } }, { "$limit": 5 }, { "$project": { "_id": 1, "name": 1, "score": { $meta: "searchScore" } } }])[ { _id: ObjectId("5ca4bbcea2dd94ee58162a72"), name: 'James Sanchez', score: 2 }, { _id: ObjectId("5ca4bbcea2dd94ee58162a71"), name: 'Jennifer Lawrence', score: 1 }]MongoDB Search では、nameフィールドに James Sanchez と Jennifer Lawrence を含むドキュメントが返されます。MongoDB Search では、name: 'James Sanchez' を含むドキュメントは、should 句で指定された ObjectId と一致するため、スコアが高くなります。
ファセット クエリ
次のクエリでは、in 演算子を使用して、ブール値を含む active フィールドでアクティブなカスタマーを検索します。このクエリは、生年月日が次のバケットに該当するアクティブなカスタマーの数を返します。
1970-01-01、このバケットの下限値を含む
1980-01-01、1970-01-01バケットの上限(排他的)とこのバケットの下限(包括的)
1990-01-01、1980-01-01バケットの上限(排他的)とこのバケットの下限(包括的)
2000-01-01、1990-01-01バケットの排他的上限
db.customers.aggregate([ { "$searchMeta": { "facet": { "operator": { "in": { "path": "active", "value": null } }, "facets": { "birthdateFacet": { "type": "date", "path": "birthdate", "boundaries": [ISODate("1970-01-01"), ISODate("1980-01-01"), ISODate("1990-01-01"), ISODate("2000-01-01")], "default": "other" } } } } }])[ { count: { lowerBound: Long('1') }, facet: { birthdateFacet: { buckets: [ { _id: ISODate('1970-01-01T00:00:00.000Z'), count: Long('1') }, { _id: ISODate('1980-01-01T00:00:00.000Z'), count: Long('0') }, { _id: ISODate('1990-01-01T00:00:00.000Z'), count: Long('0') } ] } } }]