$in
$in-
The$inoperator selects the documents where the value of a field equals any value in the specified array.$in运算符选择字段值等于指定数组中任何值的文档。To specify an要指定$inexpression, 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如果fieldholds an array, then the$inoperator selects the documents whosefieldholds 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$inoperator compares each parameter to each document in the collection, which can lead to performance issues. To improve performance:$in运算符将每个参数与集合中的每个文档进行比较,这可能会导致性能问题。要提高性能:It is recommended that you limit the number of parameters passed to the建议将传递给$inoperator to tens of values.$in运算符的参数数量限制为数十个值。Using hundreds of parameters or more can negatively impact query performance.使用数百个或更多的参数可能会对查询性能产生负面影响。Create an index on the在要查询的fieldyou want to query.field上创建索引。
NoteThis document describes the本文档介绍$inquery operator. For the$inaggregation operator, see $in (aggregation).$in查询运算符。有关$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运算符匹配值
$in Operator to Match ValuesConsider 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集合中数量字段值为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运算符匹配数组中的值
$in Operator to Match Values in an ArrayThe 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运算符与正则表达式一起使用
$in Operator with a Regular ExpressionThe $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集合中标记字段包含以be或st开头的字符串或至少包含一个以be或st开头的元素的数组的所有文档。