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

in Operator

inMongoDB Search 中的 操作符在给定路径搜索由 BSONnumberdatebooleanobjectIduuidstring 值组成的大量,然后返回字段值等于指定大量中任意值的文档。如果字段包含一个大量,则 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

字符串

要搜索的索引字段。您还可以指定通配符路径进行搜索。

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

必需

score

对象

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

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

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

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

Optional

value

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

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

必需

以下示例使用 in 操作符查询 sample_analytics.customers 集合中的集合。如果您在集群上加载示例数据并创建名为 default 的MongoDB搜索索引,该索引在集合上使用静态映射,则您可以对集合运行以下查询。

示例索引定义指定了以下操作,以支持针对集合中索引字段的 in 操作员查询:

  • 自动索引集合中所有可动态索引的字段。

  • name 字段静态索引为词元类型,并将字段中的文本转换为小写。

{
"mappings": {
"index": "default",
"dynamic": true,
"fields": {
"name": {
"normalizer": "lowercase",
"type": "token"
}
}
}
}

要学习;了解如何创建MongoDB搜索索引,请参阅管理MongoDB搜索索引。

以下查询使用 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]

MongoDB 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]

MongoDB 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]

MongoDB Search 返回在 name字段中包含 James SanchezJennifer Lawrence 的文档。MongoDB搜索对包含 name: 'James Sanchez' 的文档评分较高,因为它与 should 子句中指定的 ObjectId 匹配。

以下查询使用 in 操作符在 active 字段中搜索包含布尔值的活跃客户。该查询返回出生日期属于以下区间的活跃客户数量:

  • 1970-01-01,包括此存储桶的下限

  • 1980-01-01,1970-01-01 存储桶的不含上限以及此存储桶的包含下限

  • 1990-01-01,1980-01-01 存储桶的不含上限以及此存储桶的包含下限

  • 2000-01-01,作为 1990-01-01 分段的排除性上界

1db.customers.aggregate([
2 {
3 "$searchMeta": {
4 "facet": {
5 "operator": {
6 "in": {
7 "path": "active",
8 "value": null
9 }
10 },
11 "facets": {
12 "birthdateFacet": {
13 "type": "date",
14 "path": "birthdate",
15 "boundaries": [ISODate("1970-01-01"), ISODate("1980-01-01"), ISODate("1990-01-01"), ISODate("2000-01-01")],
16 "default": "other"
17 }
18 }
19 }
20 }
21 }
22])
[
{
count: { lowerBound: Long('1') },
facet: {
birthdateFacet: {
buckets: [
{
_id: ISODate('1970-01-01T00:00:00.000Z'),
count: Long('1')
},
{
_id: ISODate('1980-01-01T00:00:00.000Z'),
count: Long('0')
},
{
_id: ISODate('1990-01-01T00:00:00.000Z'),
count: Long('0')
}
]
}
}
}
]

后退

geoWithin

在此页面上