$in

On this page本页内容

$in

The $in operator selects the documents where the value of a field equals any value in the specified array. $in运算符选择字段值等于指定数组中任何值的文档。To specify an $in expression, use the following prototype:要指定$in表达式,请使用以下原型:

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }

For comparison of different BSON type values, see the specified BSON comparison order.有关不同BSON类型值的比较,请参阅指定的BSON比较顺序

If the field holds an array, then the $in operator selects the documents whose field holds an array that contains at least one element that matches a value in the specified array (for example, <value1>, <value2>, and so on).如果field包含数组,则$in运算符选择其field包含数组的文档,该数组至少包含一个与指定数组中的值匹配的元素(例如<value1><value2>等)。

The $in operator compares each parameter to each document in the collection, which can lead to performance issues. $in运算符将每个参数与集合中的每个文档进行比较,这可能会导致性能问题。To improve performance:要提高性能:

  • It is recommended that you limit the number of parameters passed to the $in operator to tens of values. 建议将传递给$in运算符的参数数量限制为几十个值。Using hundreds of parameters or more can negatively impact query performance.使用数百个或更多的参数可能会对查询性能产生负面影响。
  • Create an index on the field you want to query.在要查询的field上创建索引。
Note注意

This document describes the $in query operator. 本文档介绍了$in查询运算符。For the $in aggregation operator, see $in (aggregation).有关$in聚合运算符,请参阅$in(聚合)

Examples示例

Create the inventory collection:创建inventory集合:

db.inventory.insertMany( [
   { "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] },
   { "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] },
   { "item": "Maps", "tags": [ "office", "storage" ] },
   { "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] }
] )

Use the $in Operator to Match Values使用$in运算符匹配值

Consider the following example:考虑以下示例:

db.inventory.find( { quantity: { $in: [ 5, 15 ] } }, { _id: 0 } )

This query selects all documents in the inventory collection where the value of the quantity field is either 5 or 15.此查询选inventory集合中quantity字段值为5或15的所有文档。

{ item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ] },
{ item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ] }

Although you can write this query using the $or operator, use the $in operator rather than the $or operator when performing equality checks on the same field.尽管可以使用$or运算符编写此查询,但在对同一字段执行相等性检查时,请使用$in运算符而不是$or运算符。

Use the $in Operator to Match Values in an Array使用$in运算符匹配数组中的值

The following updateMany() operation sets the exclude field to false when the tags array has at least one element that matches either "home" or "school".tags数组至少有一个元素与“home”或“school”匹配时,以下updateMany()操作将exclude字段设置为false

db.inventory.updateMany(
   { tags: { $in: [ "home", "school" ] } },
   { $set: { exclude: false } }
)

Example output:示例输出:

{
   item: 'Pens',
   quantity: 350,
   tags: [ 'school', 'office' ],
   exclude: false
 },
 {
   item: 'Erasers',
   quantity: 15,
   tags: [ 'school', 'home' ],
   exclude: false
 },
 {
   item: 'Maps',
   tags: [ 'office', 'storage' ]
 },
 {
   item: 'Books',
   quantity: 5,
   tags: [ 'school', 'storage', 'home' ],
   exclude: false
 }

For additional examples in querying arrays, see:有关查询数组的其他示例,请参阅:

For additional examples in querying, see:有关查询的其他示例,请参阅:

Use the $in Operator with a Regular Expression$in运算符与正则表达式一起使用

The $in operator can specify matching values using regular expressions of the form /pattern/. $in运算符可以使用/pattern/形式的正则表达式指定匹配值。You cannot use $regex operator expressions inside an $in.不能$in中使用$regex运算符表达式。

Consider the following example:考虑以下示例:

db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )

This query selects all documents in the inventory collection where the tags field holds either a string that starts with be or st or an array with at least one element that starts with be or st.此查询选择inventory集合中的所有文档,其中tags字段包含以best开头的字符串,或者包含至少一个以best开头的元素的数组。

Tip提示
See also: 参阅:
←  $gte$lt →