$in
操作符用于选择某个域的值等于其后指定的数组中的任意值的文档。
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
域本身可以是数组,此时$in将会选择域数组中有至少任意一值等于其后指定的数组中的任意一个值的文档。
单值域的$in匹配
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
选择所有inventory集合中qty域的值为5或者15的文档。该查询可以用$or
表达,但是$in应该优先被使用。
数组域的$in匹配值
inventory拥有如下结构,tags域为数组
{ _id: 1, item: "abc", qty: 10, tags: [ "school", "clothing" ], sale: false }
db.inventory.update(
{ tags: { $in: ["appliances", "school"] } },
{ $set: { sale: true } }
)
以上操作执行后,tags数组中包含任意一个值为“appliances”, “school”的文档的sale将会被更新为true
。
$in与正则表达式
$in
支持/pattern/
模式的正则匹配,$in
内不支持使用$regex
db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
以上查询将查找到tags数组中包含任意一个值以"be"或"st"开头的所有文档。