Docs 菜单

Docs 主页启动和管理 MongoDBMongoDB Atlas

范围

在此页面上

  • 定义
  • 语法
  • 选项
  • 举例
  • 数字示例
  • 日期示例
  • 字符串示例
range

range 操作符支持对数字、日期和字符串值进行查询和评分。此操作符可用于对以下各项执行搜索:

  • BSON int32int64double 数据类型的数字字段。

  • 采用 ISODate格式的 BSON date数据类型的日期字段。

  • Atlas Search 令牌类型作为索引的 BSON string 数据类型的字符串字段。

您可以使用 range 运算符查找给定数字、日期或字母(英文字母表)范围内的结果。

range 通过以下语法实现:

1{
2 "$search": {
3 "index": <index name>, // optional, defaults to "default"
4 "range": {
5 "path": "<field-to-search>",
6 "gt | gte": <value-to-search>,
7 "lt | lte": <value-to-search>,
8 "score": <score-options>
9 }
10 }
11}

range 使用以下词条来构造查询:

字段
类型
说明
必要性
gtgte
BSON 日期或数字

查找大于 (>) 或大于或等于 (>=) 给定值的值。

  • 对于数字字段,值可以是 int32int64double 数据类型。

  • 对于日期字段,值必须是ISODate格式的日期。

  • 对于字符串字段,值必须按 Atlas Search token 类型进行索引。

ltlte
BSON 日期或数字

查找小于 (<) 或小于或等于 (<=) 给定值的值。

  • 对于数字字段,值可以是 int32int64double 数据类型。

  • 对于日期字段,值必须是ISODate格式的日期。

  • 对于字符串字段,值必须按 Atlas Search token 类型进行索引。

path
字符串或字符串数组
要搜索的一个或多个带索引字段。请参阅路径构造
score
对象

修改分配给匹配搜索结果的分数。您可以使用以下选项修改默认分数:

  • boost将生成的分数乘以给定数字。

  • constant将结果分数替换为给定数字。

  • function:使用给定的表达式替换结果分数。

有关在查询中使用 score 的信息,请参阅对结果中的文档进行评分

注意

当您查询数组中的值时,Atlas Search 不会根据与查询匹配的数组内的值数量更改匹配结果的分数。无论数组内有多少个匹配项,分数都将与单个匹配项相同。

以下示例使用示例数据的集合。如果您在集群上加载示例数据,则可以使用以下示例的索引定义创建索引,并在集群上运行示例查询。

提示

如果您已经加载示例数据集,请按照 Atlas Search 入门教程,创建索引定义并运行 Atlas Search 查询。

以下示例使用示例数据中数值字段的索引,并对索引字段运行 range 查询。

以下示例使用 range 运算符查询sample_mflix.movies 集合中的日期字段。对于本示例,您可以使用静态或动态映射为集合中名为 releaseddate 类型字段建立索引。

以下查询搜索在一月1 , 2010和 1 月1 , 2015之间上映的电影。它包括一个$limit阶段,用于将输出限制为5个结果;以及一个$project阶段,用于排除除titlereleased之外的所有字段。

1db.movies.aggregate([
2 {
3 "$search": {
4 "range": {
5 "path": "released",
6 "gt": ISODate("2010-01-01T00:00:00.000Z"),
7 "lt": ISODate("2015-01-01T00:00:00.000Z")
8 }
9 }
10 },
11 {
12 "$limit": 5
13 },
14 {
15 "$project": {
16 "_id": 0,
17 "title": 1,
18 "released": 1
19 }
20 }
21])

以上查询会返回以下搜索结果:

1{ "title" : "The Fall of the House of Usher", "released" : ISODate("2011-09-20T00:00:00Z") }
2{ "title" : "The Blood of a Poet", "released" : ISODate("2010-05-20T00:00:00Z") }
3{ "title" : "Too Much Johnson", "released" : ISODate("2014-08-30T00:00:00Z") }
4{ "title" : "Stolen Desire", "released" : ISODate("2012-07-01T00:00:00Z") }
5{ "title" : "The Monkey King", "released" : ISODate("2012-01-12T00:00:00Z") }

以下示例使用 range 运算符查询 sample_mflix.movies 集合中的字符串字段。对于本示例,您必须使用静态映射将集合中名为 title 的字段索引为 Atlas Search token 类型。

以下名为 default 的索引定义将 movies 集合中的 title 字段索引为 Atlas Search token 类型:

{
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "token",
"normalizer": "lowercase"
}
}
}
}

以下查询搜索包含citycountry之间的字符的电影标题。它包括一个$limit阶段,用于将输出限制为5结果;以及一个$project阶段,用于排除除title之外的所有字段。

1db.movies.aggregate([
2 {
3 "$search": {
4 "range": {
5 "path": "title",
6 "gt": "city",
7 "lt": "country"
8 }
9 }
10 },
11 {
12 "$limit": 5
13 },
14 {
15 "$project": {
16 "_id": 0,
17 "title": 1
18 }
19 }
20])
[
{ title: 'Civilization' },
{ title: 'Clash of the Wolves' },
{ title: 'City Lights' },
{ title: 'Comradeship' },
{ title: 'Come and Get It' }
]
← queryString