in
定義
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> } } }
フィールド
フィールド | タイプ | 説明 | 必要性 |
---|---|---|---|
path | string | 検索するインデックス付きフィールド。 検索するには、 ワイルドカード パスを指定することもできます。 詳細については、「 クエリ パスの構築」を参照してください。 フィールドで string値を検索するには、フィールドを Atlas Searchトークンタイプとしてインデックス化する必要があります。 | 必須 |
score | オブジェクト | 一致する検索タームの結果に割り当てる スコア 。 スコアを変更するには、次のいずれかのオプションを使用します。
| 任意 |
value | 必須 |
例
次の例では、 in
演算子を使用して、付属のsample_analytics.customersコレクション内のコレクションをクエリします。 サンプル データを Atlas クラスターにロードし、 default
コレクションの 静的マッピング を使用する という名前の Atlas Search インデックスを 作成 すると、コレクションに対して次のクエリを実行できます。
サンプル インデックス
サンプルのインデックス定義では、コレクション内のインデックス付きフィールドに対するin
演算子クエリをサポートするために、次のアクションを指定します。
コレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックス化します。
name
フィールドをトークンタイプとして静的にインデックスし、フィールドのテキストを小文字に変換します。
{ "mappings": { "index": "default", "dynamic": true, "fields": { "name": { "normalizer": "lowercase", "type": "token" } } } }
Atlas Search インデックスの作成方法については、「 Atlas Search インデックスの作成 」を参照してください。
サンプル クエリ
次のクエリは、 in
演算子を使用して、特定の日付に手順を実行したカスタマーを対象に、単一の 値を含むbirthdate
フィールドで検索します。 クエリは、 $project
ステージを使用して次の操作を実行します。
結果の
_id
フィールドを省略します。name
birthdate
結果には フィールドと フィールドのみが含まれます。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "in": { 5 "path": "birthdate", 6 "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")] 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "name": 1, 14 "birthdate": 1 15 } 16 } 17 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 birthdate: ISODate("1977-03-02T02:20:31.000Z") 5 }, 6 { 7 name: 'Brad Cardenas', 8 birthdate: ISODate("1977-05-06T21:57:35.000Z") 9 } 10 ]
Atlas Search は、クエリで指定された日付に一致する 2 つのドキュメントを返します。
次のクエリでは、 in
演算子を使用して、アカウント番号371138
、 371139
、または371140
を持つカスタマーに対して、番号の配列を含むaccounts
フィールドをクエリします。 クエリは、 $project
ステージを使用して次の操作を実行します。
結果の
_id
フィールドを省略します。name
accounts
結果には フィールドと フィールドのみが含まれます。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "in": { 5 "path": "accounts", 6 "value": [371138, 371139, 371140] 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "name": 1, 14 "accounts": 1 15 } 16 } 17 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 } 6 ]
Atlas Search では、クエリで指定されたアカウント番号371138
に一致するドキュメントが 1 つだけ返されます。
次のクエリは、 text
演算子を使用して、 name
フィールドに最初の名前がJames
であるカスタマーをクエリします。 クエリは、 in
_id
フィールドの指定された ObjectId に関連付けられたカスタマーの優先順位を指定します。 クエリは、 $limit
ステージを使用して出力を5の結果に制限し、 $project
ステージを使用して次のようにします。
_id
name
結果には フィールドと フィールドのみが含まれます。score
という名前のフィールドを結果に追加する。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "must": [{ 6 "in": { 7 "path": "name", 8 "value": ["james sanchez", "jennifer lawrence"] 9 } 10 }], 11 "should": [{ 12 "in": { 13 "path": "_id", 14 "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")] 15 } 16 }] 17 } 18 } 19 }, 20 { 21 "$limit": 5 22 }, 23 { 24 "$project": { 25 "_id": 1, 26 "name": 1, 27 "score": { $meta: "searchScore" } 28 } 29 } 30 ])
1 [ 2 { 3 _id: ObjectId("5ca4bbcea2dd94ee58162a72"), 4 name: 'James Sanchez', 5 score: 2 6 }, 7 { 8 _id: ObjectId("5ca4bbcea2dd94ee58162a71"), 9 name: 'Jennifer Lawrence', 10 score: 1 11 } 12 ]
Atlas Search では、 name
フィールドにJames Sanchez
とJennifer Lawrence
を含むドキュメントが返されます。 Atlas Search は、 name: 'James Sanchez'
を含むドキュメントは、 should
句で指定されたObjectId
と一致するため、スコアが高くなります。