Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / / /

in

在此页面上

  • 定义
  • 语法
  • 字段
  • 举例
  • 样本索引
  • 样本查询

inAtlas SearchBSONnumber操作符对给定路径上的datebooleanobjectIduuid 、 或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>
}
}
}
字段
类型
说明
必要性
path
字符串

要搜索的索引字段。您还可以指定通配符路径进行搜索。有关详细信息,请参阅构造查询路径

要搜索字段中的字符串值,您必须将该字段索引为 Atlas Search元类型。

必需
score
对象

分配给匹配搜索词结果的分数。使用以下选项之一修改分数:

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

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

  • function:使用函数表达式替换结果分数。

Optional
value

要搜索的一个或多个值。 值可以是单个值或仅具有一种受支持的BSON类型的值数组,并且不能是不同类型的混合。

要搜索字段中的字符串值,您必须将该字段索引为 Atlas Search元类型。

必需

以下示例使用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字段。

  • 结果中仅包含namebirthdate字段。

1db.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字段,其中包含一个数字数组,查找帐号为371138371139371140的客户。 该查询使用$project阶段执行以下操作:

  • 省略结果中的_id字段。

  • 结果中仅包含nameaccounts字段。

1db.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阶段限制输出:

  • 结果中仅包含_idname字段。

  • 将名为score的字段添加到结果中。

1db.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 SanchezJennifer Lawrence的文档。 Atlas Search 对包含name: 'James Sanchez'的文档评分较高,因为它与should子句中指定的ObjectId匹配。

后退

geoWithin