Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

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 は、結果セット内のすべてのドキュメントに対して1constantスコアを割り当てます。 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という名前のフィールドを含むドキュメントを検索します。

1db.fruit.aggregate([
2 {
3 $search: {
4 "exists": {
5 "path": "type"
6 }
7 }
8 }
9])

上記のクエリは、 コレクションの最初の 3 つのドキュメントを返します。 _id: 4を含むドキュメントは、 typeフィールドがないため含まれません。

Atlas Search Playground でこれを試してみてください。

埋め込みフィールドを検索するには、 ドット表記 を使用します。 次の例では、 quantitiesという名前のフィールド内に埋め込まれたlemonsという名前のフィールドがあるドキュメントを検索します。

1db.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を使用しています。

1db.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 でこれを試してみてください。

戻る

equals