exists
定義
exists
exists
演算子は、ドキュメント内に指定されたインデックス付きフィールド名へのパスが存在するかどうかをテストします。 指定されたフィールドが存在してもインデックスがない場合、ドキュメントは結果セットに含まれません。exists
は、他の検索句と組み合わせて、 複合クエリの一部としてよく使用されます。
構文
exists
の構文は次のとおりです。
1 { 2 $search: { 3 "index": <index name>, // optional, defaults to "default" 4 "exists": { 5 "path": "<field-to-test-for>", 6 "score": <options> 7 } 8 } 9 }
オプション
exists
では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
path | string | 検索するインデックス付きフィールド。 | はい |
score | オブジェクト | 一致する検索結果に割り当てる スコア 。 デフォルトのスコアを変更するオプションの詳細については、「 結果内のドキュメントのスコアリング 」を参照してください。 | no |
スコアリングの動作
Atlas Search は、結果セット内のすべてのドキュメントに対して1
のconstant
スコアを割り当てます。 score
オプションを使用して、デフォルトの Atlas Search スコアをカスタマイズできます。 Atlas Search によって返されるデフォルトのスコアの変更の詳細については、「 スコアの変更 」を参照してください。
例
次の例は、Atlas Search Playground または Atlas クラスターで試すことができます。
サンプル コレクション
このページの例では、次のドキュメントを含むfruit
というコレクションを使用します。
1 { 2 "_id" : 1, 3 "type" : "apple", 4 "description" : "Apples come in several varieties, including Fuji, Granny Smith, and Honeycrisp." 5 }, 6 { 7 "_id" : 2, 8 "type" : "banana", 9 "description" : "Bananas are usually sold in bunches of five or six." 10 }, 11 { "_id" : 3, 12 "type": "apple", 13 "description" : "Apple pie and apple cobbler are popular apple-based desserts." 14 }, 15 { "_id" : 4, 16 "description" : "Types of citrus fruit include lemons, oranges, and grapefruit.", 17 "quantities" : { 18 "lemons": 200, 19 "oranges": 240, 20 "grapefruit": 160 21 } 22 }
サンプル インデックス
fruit
コレクションには、デフォルトの 標準 アナライザを使用するデフォルトの 動的 Atlas Search インデックスがあります。standard
アナライザはすべての単語を小文字にし、よく使われるストップワード( "the", "a", "and",
など)は無視します。
サンプル クエリ
次のクエリは、Atlas Search クエリのexists
演算子を示しています。
基本的な例
次の例では、 type
という名前のフィールドを含むドキュメントを検索します。
1 db.fruit.aggregate([ 2 { 3 $search: { 4 "exists": { 5 "path": "type" 6 } 7 } 8 } 9 ])
上記のクエリは、 コレクションの最初の 3 つのドキュメントを返します。 _id: 4
を含むドキュメントは、 type
フィールドがないため含まれません。
埋め込み例
埋め込みフィールドを検索するには、 ドット表記 を使用します。 次の例では、 quantities
という名前のフィールド内に埋め込まれたlemons
という名前のフィールドがあるドキュメントを検索します。
1 db.fruit.aggregate([ 2 { 3 "$search": { 4 "exists": { 5 "path": "quantities.lemons" 6 } 7 } 8 } 9 ])
1 { 2 "_id" : 4, 3 "description" : "Types of citrus fruit include lemons, oranges, and grapefruit.", 4 "quantities" : { 5 "lemons": 200, 6 "oranges": 240, 7 "grapefruit": 160 8 } 9 }
➤ Atlas Search Playground でこれを試してみてください。
複合例
次の例では、複合クエリの一部としてexists
を使用しています。
1 db.fruit.aggregate([ 2 { 3 $search: { 4 "compound": { 5 "must": [ 6 { 7 "exists": { 8 "path": "type" 9 } 10 }, 11 { 12 "text": { 13 "query": "apple", 14 "path": "type" 15 } 16 }], 17 "should": { 18 "text": { 19 "query": "fuji", 20 "path": "description" 21 } 22 } 23 } 24 } 25 } 26 ])
1 { 2 "_id" : 1, 3 "type" : "apple", 4 "description" : "Apples come in several varieties, including Fuji, Granny Smith, and Honeycrisp." 5 } 6 { 7 "_id" : 3, 8 "type" : "apple", 9 "description" : "Apple pie and apple cobbler are popular apple-based desserts." 10 }
どちらのドキュメントにもtype
フィールドがあり、両方に検索用語apple
が含まれています。 _id: 1
を含むドキュメントが最初に返されるのは、 should
句を満たすためです。
➤ Atlas Search Playground でこれを試してみてください。