Docs 菜单
Docs 主页
/
MongoDB 阿特拉斯
/ / / /

对 Atlas Search 结果进行计数

在此页面上

  • 语法
  • 选项
  • 对结果进行计数
  • SEARCH_META 聚合变量
  • 举例

Atlas Search count选项在元数据结果文档中添加一个字段,显示查询的搜索结果计数。您可以使用count来确定结果集的大小。您可以在$search$searchMeta阶段使用它。您必须将其与操作符收集器结合使用,以显示文档总数或与查询匹配的文档数下限。

注意

要对分片集合使用 count 选项,您的集群必须运行 MongoDB 6.0 或更高版本。在运行 MongoDB 7.2.0 版本的分片 Atlas 集群上,$searchMeta 可能会为 count 返回错误。

MongoDB 建议使用带 $searchMeta 阶段的 count 来检索仅针对该查询的元数据结果。要使用 $search 阶段来检索元数据结果和查询结果,则必须使用 $$SEARCH_META 变量。要了解详情,请参阅 SEARCH_META 聚合变量

注意

对于在解释模式下使用count运行的查询,Atlas Search 不会将count结果包含在查询结果中。

count 通过以下语法实现:

{
"$searchMeta"|"$search": {
"index": "<index name>", // optional, defaults to "default"
"<operator>": {
<operator-specifications>
},
"count": {
"type": "lowerBound"|"total",
"threshold": <number-of-documents> //optional
}
}
}
字段
类型
说明
必需?
type
字符串

结果集中的文档计数类型。值可以是以下值之一:

  • lowerBound - 用于计算与查询匹配的文档数量的下限。您可以设置下限数字的 threshold

  • total - 用于对与查询匹配的文档数量进行精确计数。如果结果集较大,Atlas Search 可能需要比 lowerBound 更长的时间才能返回计数。

如果省略,则默认值为 lowerBound

没有
threshold
int
如果 typelowerBound,精确计数应包含的文档数。如果省略,默认为 1000,表示 1000 以下的任何数字都是结果中文档数的精确计数,1000 以上的任何数字都是粗略计数。
没有

结果文档中的计数文档包含以下整数字段:

选项
说明
lowerBound
该结果集的下限。如果省略 type 选项并显式请求 lowerBound 类型的计数,则默认返回此值。
total
该结果集的总计数。仅当请求类型为 total时才会返回此值。

当您使用 $search 阶段运行查询时,Atlas Search 会将元数据结果存储在 $$SEARCH_META 变量中,并且仅返回搜索结果。您可以在所有支持的聚合管道阶段使用 $$SEARCH_META 变量来查看 $search 查询的元数据结果。

只有同时需要搜索结果和元数据结果时,MongoDB 才建议使用 $$SEARCH_META 变量。否则,请使用:

例子

假设 sample_mflix.movies 集合中 released 字段有一个索引:

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

以下查询在movies集合中搜索 2011 年 9 月 1 日左右上映的电影。查询请求结果总数。查询包括:

  • $project阶段从文档中排除除 titlereleased 之外的所有字段,并将存储在 $$SEARCH_META 变量中的元数据结果作为名为 meta 的字段的值包括在内。。

  • $limit 阶段将输出限制为 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
}
])

Atlas Search 返回以下查询结果:

{
"_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 集合中的 year 字段的索引:

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

以下查询从 movies 集合中搜索 20102015 年份之间的电影。该查询请求对结果进行下限计数:

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

Atlas Search 返回以下结果:

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

以下查询在collection中搜索20102015 movies年份之间的电影。查询请求结果总数:

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

Atlas Search 返回以下结果:

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

要了解有关结果的详细信息,请参阅计数结果。

后退

3。突出显示搜索词

来年

5。对结果进行分页