AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

MongoDB Search 結果のカウント

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

MongoDB では、クエリのみのメタデータ結果を検索するために、 $searchMetaステージでcountを使用することを推奨しています。 To retrieve metadata results and query results using the $search stage, you must use the $$SEARCH_META variable. 詳しくは、「 SEARCH_META集計変数 」を参照してください。

シャーディングされたコレクションで count オプションを使用するには、クラスターでMongoDB 7.0 以降を実行する必要があります。MongoDB 7.2.0を実行中シャーディングされたクラスターでは、$searchMetacount のエラーを返す可能性があります。

MongoDB 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 と比べてMongoDB Search が数を返すのに時間がかかる可能性があります。

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

no

threshold

整数

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

no

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

オプション
説明

lowerBound

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

total

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

$search ステージを使用してクエリを実行すると、 MongoDB 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": "token"
},
"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"
}
}
}
])

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

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

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

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

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

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

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