Docs 主页 → 启动和管理 MongoDB → MongoDB Atlas
范围
定义
语法
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
使用以下词条来构造查询:
字段 | 类型 | 说明 | 必要性 |
---|---|---|---|
gt 或 gte | BSON 日期或数字 | 查找大于 (
| 否 |
lt 或 lte | BSON 日期或数字 | 查找小于 (
| 否 |
path | 字符串或字符串数组 | 要搜索的一个或多个带索引字段。请参阅路径构造。 | 是 |
score | 对象 | 修改分配给匹配搜索结果的分数。您可以使用以下选项修改默认分数:
有关在查询中使用 注意当您查询数组中的值时,Atlas Search 不会根据与查询匹配的数组内的值数量更改匹配结果的分数。无论数组内有多少个匹配项,分数都将与单个匹配项相同。 | 否 |
举例
以下示例使用示例数据的集合。如果您在集群上加载示例数据,则可以使用以下示例的索引定义创建索引,并在集群上运行示例查询。
提示
如果您已经加载示例数据集,请按照 Atlas Search 入门教程,创建索引定义并运行 Atlas Search 查询。
数字示例
以下示例使用示例数据中数值字段的索引,并对索引字段运行 range
查询。
日期示例
以下示例使用 range
运算符查询sample_mflix.movies
集合中的日期字段。对于本示例,您可以使用静态或动态映射为集合中名为 released
的 date
类型字段建立索引。
样本索引
样本查询
以下查询搜索在一月1 , 2010和 1 月1 , 2015之间上映的电影。它包括一个$limit
阶段,用于将输出限制为5个结果;以及一个$project
阶段,用于排除除title
和released
之外的所有字段。
1 db.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" } } } }
样本查询
以下查询搜索包含city
和country
之间的字符的电影标题。它包括一个$limit
阶段,用于将输出限制为5结果;以及一个$project
阶段,用于排除除title
之外的所有字段。
1 db.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' } ]