文档菜单
文档首页
/
MongoDB 手册
/ / /

$indexOfArray (聚合)

本页内容

  • 定义
  • 行为
  • 示例
$indexOfArray

在数组中搜索指定值的首次出现,并返回该值的数组索引。数组索引从零开始。

$indexOfArray有以下操作符表达式语法:

{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] }
字段
类型
描述
<array>
数组

可以是任何有效的表达式,只要它解析为数组。有关表达式的更多信息,请参阅表达式运算符。

如果数组表达式解析为null或引用一个缺失的字段,$indexOfArray返回null

如果数组表达式不解析为数组或null也不引用一个缺失的字段,$indexOfArray返回错误。

<search value>
字符串
可以是任何有效的表达式。有关表达式的更多信息,请参阅表达式运算符。
<start>
整数

可选。一个整数或可以表示为整数的数字(如2.0),指定搜索的起始索引位置。可以是任何有效的表达式,解析为非负整数。

如果未指定,搜索的起始索引位置是字符串的开始。

<end>
整数

可选。一个整数,或者可以表示为整数的数字(例如2.0),用于指定搜索的结束索引位置。可以是任何有效的表达式,其结果为非负整数。如果您指定了<end>索引值,也应指定<start>索引值;否则,$indexOfArray将使用<end>值作为<start>索引值,而不是<end>值。

如果未指定,搜索的结束索引位置为字符串的末尾。

如果在<array expression>中找到多个<search expression>,则$indexOfArray返回从起始索引位置开始的第一个<search expression>的索引。

$indexOfArray返回null

  • 如果<array expression>为null,或者

  • 如果<array expression>引用输入文档中不存在的字段。

$indexOfArray返回错误

  • 如果<array expression>不是数组且不为null,或者

  • 如果<start><end>是负整数(或可以表示为负整数的值,如-5.0)。

$indexOfArray返回-1

  • 如果数组中未找到<search expression>,或者

  • 如果<start>是一个大于<end>的数字,或者

  • 如果<start>是一个大于数组长度的数字。

示例
结果
{ $indexOfArray: [ [ "a", "abc" ], "a" ] }
0
{ $indexOfArray: [ [ "a", "abc", "de", ["de"] ], ["de"] ] }
3
{ $indexOfArray: [ [ 1, 2 ], 5 ] }
-1
{ $indexOfArray: [ [ 1, 2, 3 ], [1, 2] ] }
-1
{ $indexOfArray: [ [ 10, 9, 9, 8, 9 ], 9, 3 ] }
4
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 0, 1 ] }
-1
{ $indexOfArray: [[ "a", "abc", "b" ], "b", 1, 0 ] }
-1
{ $indexOfArray: [[ "a", "abc", "b" ], "b", 20 ] }
-1
{ $indexOfArray: [[ null, null, null ], null ] }
0
{ $indexOfArray: [ null, "foo" ] }
null
{ $indexOfArray: [ "foo", "foo" ] }
错误

示例使用此 库存 集合

db.inventory.insertMany( [
{ _id: 0, items: [ "one", "two", "three" ] },
{ _id: 1, items: [ 1, 2, 3 ] },
{ _id: 2, items: [ 1, 2, 3, 2 ] },
{ _id: 3, items: [ null, null, 2 ] },
{ _id: 4, items: [ 2, null, null, 2 ] },
{ _id: 5, items: null },
{ _id: 6, amount: 3 }
] )

以下示例使用 $indexOfArrayitems 数组中查找 2

db.inventory.aggregate( [ {
$project: {
index: { $indexOfArray: [ "$items", 2 ] }
}
} ] )

示例返回

  • 如果找到,则在每个 items 数组中值的第一个数组索引 2。数组索引从 0 开始。

  • 如果 2 不在 items 数组中,则索引为 -1

  • 如果 items 不是数组或 items 不存在,则索引为 null

示例输出

[
{ _id: 0, index: -1 },
{ _id: 1, index: 1 },
{ _id: 2, index: 1 },
{ _id: 3, index: 2 },
{ _id: 4, index: 0 },
{ _id: 5, index: null },
{ _id: 6, index: null }
]

提示

另请参阅

返回

$in

本页内容