in
定义
in
Atlas SearchBSONnumber
操作符对给定路径上的date
、boolean
、objectId
、uuid
、 或string
值的数组执行 ,并且返回字段值等于指定数组中任何值的文档。如果该字段包含一个数组,则in
操作符会选择其字段包含一个数组的文档,该数组至少包含一个与指定数组中的任何值匹配的元素。
语法
in
操作符的语法如下:
{ $search: { "index": <index name>, // optional, defaults to "default" "in": { "path": "<field-to-search>", "score": <options>, "value": <single-or-array-of-values-to-search> } } }
字段
字段 | 类型 | 说明 | 必要性 |
---|---|---|---|
| 字符串 | 必需 | |
| 对象 | 分配给匹配搜索词结果的分数。使用以下选项之一修改分数:
| Optional |
| 必需 |
示例
以下示例使用 in
操作符查询 sample_analytics.customers 集合中的集合。如果您在 Atlas 集群上加载示例数据并创建名为 default
的 Atlas Search 索引,该索引使用集合上的静态映射,则可以对集合运行以下查询。
样本索引
示例索引定义指定了以下操作,以支持针对集合中索引字段的 in
操作员查询:
自动索引集合中所有可动态索引的字段。
将
name
字段静态索引为词元类型,并将字段中的文本转换为小写。
{ "mappings": { "index": "default", "dynamic": true, "fields": { "name": { "normalizer": "lowercase", "type": "token" } } } }
要了解如何创建 Atlas Search 索引,请参阅创建 Atlas Search 索引。
样本查询
以下查询使用 in
操作符在Atlas Search birthdate
字段(包含单个值)中查找出生在给定日期的客户。 该查询使用$project
阶段执行以下操作:
省略结果中的
_id
字段。在结果中仅包含
name
和birthdate
字段。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "in": { 5 "path": "birthdate", 6 "value": [ISODate("1977-03-02T02:20:31.000+00:00"), ISODate("1977-03-01T00:00:00.000+00:00"), ISODate("1977-05-06T21:57:35.000+00:00")] 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "name": 1, 14 "birthdate": 1 15 } 16 } 17 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 birthdate: ISODate("1977-03-02T02:20:31.000Z") 5 }, 6 { 7 name: 'Brad Cardenas', 8 birthdate: ISODate("1977-05-06T21:57:35.000Z") 9 } 10 ]
Atlas Search 返回与查询中指定日期匹配的两个文档。
以下查询使用in
操作符查询accounts
字段,其中包含一个数字数组,查找帐号为371138
、 371139
或371140
的客户。 该查询使用$project
阶段执行以下操作:
省略结果中的
_id
字段。在结果中仅包含
name
和accounts
字段。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "in": { 5 "path": "accounts", 6 "value": [371138, 371139, 371140] 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 0, 13 "name": 1, 14 "accounts": 1 15 } 16 } 17 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 } 6 ]
Atlas Search 仅返回一份与查询中指定的帐号371138
匹配的文档。
以下查询使用text
操作符查询name
字段中名字为James
的客户。 该查询使用in
操作符为与_id
字段中给定 objectId 关联的客户指定偏好。 查询使用$limit
阶段将输出限制为5个结果,并使用$project
阶段限制输出:
在结果中仅包含
_id
和name
字段。将名为
score
的字段添加到结果中。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "must": [{ 6 "in": { 7 "path": "name", 8 "value": ["james sanchez", "jennifer lawrence"] 9 } 10 }], 11 "should": [{ 12 "in": { 13 "path": "_id", 14 "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")] 15 } 16 }] 17 } 18 } 19 }, 20 { 21 "$limit": 5 22 }, 23 { 24 "$project": { 25 "_id": 1, 26 "name": 1, 27 "score": { $meta: "searchScore" } 28 } 29 } 30 ])
1 [ 2 { 3 _id: ObjectId("5ca4bbcea2dd94ee58162a72"), 4 name: 'James Sanchez', 5 score: 2 6 }, 7 { 8 _id: ObjectId("5ca4bbcea2dd94ee58162a71"), 9 name: 'Jennifer Lawrence', 10 score: 1 11 } 12 ]
Atlas Search 返回在name
字段中包含James Sanchez
和Jennifer Lawrence
的文档。 Atlas Search 对包含name: 'James Sanchez'
的文档评分较高,因为它与should
子句中指定的ObjectId
匹配。