Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

Atlas Search 結果のカウント

項目一覧

  • 構文
  • オプション
  • 結果をカウントする
  • SEARCH_META 集計変数

Atlas Search countオプションは、クエリの検索結果の数を表示するフィールドをメタデータの結果ドキュメントに追加します。 countを使用して結果セットのサイズを決定できます。 $searchまたは$searchMetaステージで使用できます。 ドキュメントの合計数またはクエリに一致するドキュメント数の下限値を表示するには、演算子またはコレクターと組み合わせて使用する必要があります。

注意

シャーディングされたコレクションでcountオプションを使用するには、クラスターで MongoDB v6.0 以降を実行する必要があります。MongoDB v7.2.0 を実行しているシャーディングされた Atlas クラスターでは、$searchMetacount に対するエラーが返される可能性があります。

MongoDB では、クエリのメタデータ結果のみを取得するために、$searchMeta ステージで count を使用することを推奨します。$search ステージを使用してメタデータ結果とクエリ結果を取得するには、$$SEARCH_META 変数を使用する必要があります。詳細については、SEARCH_META 集計変数」を参照してください。

注意

Atlas Search では、explain モードでcount を使用して実行されたクエリの結果には count 結果は含まれません。

count の構文は次のとおりです。

{
"$searchMeta"|"$search": {
"index": "<index name>", // optional, defaults to "default"
"<operator>": {
<operator-specifications>
},
"count": {
"type": "lowerBound"|"total",
"threshold": <number-of-documents> //optional
}
}
}
フィールド
タイプ
説明
必須

type

string

結果セット内のドキュメントのカウントのタイプ。値は次のいずれかになります。

  • lowerBound - クエリにマッチするドキュメント数の下限値。下限値の threshold を設定できます。

  • total - クエリにマッチするドキュメントの正確な数。結果セットが大きい場合、lowerBound と比べて Atlas Search が数を返すのに時間がかかる可能性があります。

省略した場合、デフォルトは lowerBound になります。

no

threshold

整数

typelowerBound の場合に正確な数に含めるドキュメントの数。省略した場合、デフォルトは 1000 になります。これは、1000 までの任意の数値は正確な数であり、1000 を超える数値は結果のドキュメント数がおよその数であることを示します。

no

結果ドキュメントに含まれるカウント ドキュメントには、次の整数フィールドが含まれます。

オプション
説明

lowerBound

この結果セットの下限。type オプションを省略し、明示的に タイプの カウントlowerBound をリクエストした場合は、これがデフォルトで返されます。

total

この結果セットの合計数。 これは、タイプtotal のカウントが要求された場合にのみ返されます。

$search ステージを使用してクエリを実行すると、Atlas Search はメタデータの結果を $$SEARCH_META 変数に保存し、検索結果のみを返します。サポートされているすべての集計パイプライン ステージ$$SEARCH_META 変数を使用して、$search クエリのメタデータ結果を表示できます。

MongoDB では、検索結果とメタデータ結果の両方が必要な場合にのみ $$SEARCH_META 変数を使用することを推奨します。それ以外の場合は、次を使用します。

  • $search ステージを使用して、検索結果のみを取得します。

  • $searchMeta ステージを使用して、メタデータ結果のみを取得します。

以下のように sample_mflix.movies コレクションの released フィールドにインデックスがあるとします。

{
"mappings": {
"dynamic": false,
"fields": {
"released": {
"type": "date"
}
}
}
}

次のクエリは、movies コレクション内で 2011 年 9 月 1 日前後にリリースされた映画を検索します。このクエリは、結果の総数をリクエストします。このクエリには次のものが含まれます。

サンプルクエリでは、次のステージを使用します。

movies コレクション内で、 2011 年 9 月 01 日前後に公開された映画を検索します。このクエリは、genres フィールドの結果とメタデータの合計数をリクエストします。

titlereleased 以外のすべてのフィールドをドキュメントから除外し、$$SEARCH_META 変数に保存されているメタデータの結果を meta という名前のフィールドの値として含めます。

出力を2ドキュメントに制限します。

db.movies.aggregate([
{
"$search": {
"near": {
"path": "released",
"origin": ISODate("2011-09-01T00:00:00.000+00:00"),
"pivot": 7776000000
},
"count": {
"type": "total"
}
}
},
{
"$project": {
"meta": "$$SEARCH_META",
"title": 1,
"released": 1
}
},
{
"$limit": 2
}
])
{
"_id" : ObjectId("573a13c3f29313caabd6b025"),
"title" : "Submarino",
"released" : ISODate("2011-09-01T00:00:00Z"),
"meta" : {
"count" : { "total" : NumberLong(23026) }
}
}
{
"_id" : ObjectId("573a13c7f29313caabd748f7"),
"title" : "Devil's Playground",
"released" : ISODate("2011-09-01T00:00:00Z"),
"meta" : {
"count" : { "total" : NumberLong(23026) }
}
}

sample_mflix.movies コレクションの released フィールドと genres フィールドにインデックスがあるとします。

{
"mappings": {
"dynamic": false,
"fields": {
"genres": {
"type": "stringFacet"
},
"released": {
"type": "date"
}
}
}
}

サンプルクエリでは、次のステージを使用します。

movies コレクション内で、 2011 年 9 月 01 日前後に公開された映画を検索します。このクエリは、genres フィールドの結果とメタデータの合計数をリクエストします。

出力を2ドキュメントに制限します。

titlereleasedgenres 以外のすべてのフィールドをドキュメントから除外し、ドキュメントの meta 配列内の $$SEARCH_META 変数に保存されているメタデータの結果を含めることで、$search の結果を処理します。

db.movies.aggregate([
{
"$search": {
"facet": {
"operator": {
"near": {
"path": "released",
"origin": ISODate("2011-09-01T00:00:00.000+00:00"),
"pivot": 7776000000
}
},
"facets": {
"genresFacet": {
"type": "string",
"path": "genres"
}
}
},
"count": {
"type": "total"
}
}
},
{
"$limit": 2
},
{
"$facet": {
"results": [
{ "$project":
{
"title": 1,
"released": 1,
"genres": 1
}
}
],
"meta": [
{"$replaceWith": "$$SEARCH_META"},
{"$limit": 1}
]
}
}
])
[
{
results: [
{
_id: ObjectId('573a13c3f29313caabd6b025'),
genres: [ 'Drama' ],
title: 'Submarino',
released: ISODate('2011-09-01T00:00:00.000Z')
},
{
_id: ObjectId('573a13c7f29313caabd748f7'),
genres: [ 'Action', 'Horror' ],
title: "Devil's Playground",
released: ISODate('2011-09-01T00:00:00.000Z')
}
],
meta: [
{
count: { total: Long('20878') },
facet: {
genresFacet: {
buckets: [
{ _id: 'Drama', count: Long('12149') },
{ _id: 'Comedy', count: Long('6436') },
{ _id: 'Romance', count: Long('3274') },
{ _id: 'Crime', count: Long('2429') },
{ _id: 'Thriller', count: Long('2400') },
{ _id: 'Action', count: Long('2349') },
{ _id: 'Adventure', count: Long('1876') },
{ _id: 'Documentary', count: Long('1755') },
{ _id: 'Horror', count: Long('1432') },
{ _id: 'Biography', count: Long('1244') }
]
}
}
}
]
}
]

結果の詳細については、「結果のカウント」を参照してください。

次の例では、sample_mflix.movies コレクションの year フィールドのインデックスを使用します。

{
"mappings": {
"dynamic": false,
"fields": {
"year": {
"type": "number"
}
}
}
}

以下のクエリでは、movies コレクション内の 2010 年から 2015 年までの映画を検索します。クエリは、結果の下限値を要求します。

db.movies.aggregate([
{
"$searchMeta": {
"range": {
"path": "year",
"gte": 2010,
"lte": 2015
},
"count": {
"type": "lowerBound"
}
}
}
])

Atlas Search により次の結果が返されます。

{ "count" : { "lowerBound" : NumberLong(1001) } }

以下のクエリでは、movies コレクション内の 2010 年から 2015 年までの映画を検索します。クエリは、結果の合計数をリクエストします。

db.movies.aggregate([
{
"$searchMeta": {
"range": {
"path": "year",
"gte": 2010,
"lte": 2015
},
"count": {
"type": "total"
}
}
}
])

Atlas Search により次の結果が返されます。

{ "count" : { "total" : NumberLong(5971) } }

結果の詳細については、「結果のカウント」を参照してください。

戻る

3 。 検索タームを強調表示