Mongodb $in操作符
下一篇: Mongodb $nin操作符
$in
$in操作符输出数据库中特定字段的值等于指定数组中某一个值的文档,为了定义 $in 表达式,使用了以下原型:
{ field: { $in: [value1,value2, ... valuen ] } }
如果field是一个数组,那么$in操作符将输出所有文档中包含field这样的数组,而且field中至少一个元素在定义的[value1,value2, … valuen]这个数组中。
下面介绍实例,使用 $in 操作符来匹配数值:
>db.test.find() {"_id":1,"name":"psz","age":22} {"_id":1,"name":"psz","age":23} >db.test.find({age:{$in:[23,24]}}) {"_id":1,"name":"psz","age":23}
上面查询语句输出test数据库中,age这个字段的值要么是23,要么是24的文档。虽然上面的查询也可以使用 $or 操作符,但是当判断某个字段的值在一个域中是有与之相等时,理应用 $in 操作符。
使用 $in 操作符匹配数组中的值
例子,假设test数据库含有的文档中包括tags这字段,如下:
{ _id: 1, tags: [ "school", "clothing" ], sale: false }
这时候如果想使用 update() 更新操作符来将sale字段设置为true,而且前提条件是只有当tags数组中至少有一个元素的值是"appliances" 或 "school"时才将其设为true。那么可以这么操作:
db.test.update( { tags: { $in: ["appliances", "school"] } }, { $set: { sale:true } } )
再看一个关于数组匹配的实例:
>db.test.find() {"_id":1,"name":"psz","age":[22,23,24]} {"_id":1,"name":"psz","age":[22,18,19]} >db.test.find({age:{$in:[3,4,5,22]}}) {"_id":1,"name":"psz","age":[22,23,24]} {"_id":1,"name":"psz","age":[22,18,19]}
上面的age数组中都有22这个元素,而22这个元素在指定的[3,4,5,22]这个数组中,所以符合匹配要求。$in 满足的要求是至少一个匹配即可。
用正则使用 $in 操作符
$in 操作符可以使用正则表达式/pattern/这样的形式来进行数值匹配,但是你在 $in 操作符中不能使用 $regex 操作符。
看下面的例子:
db.test.find( { tags: { $in: [ /^be/, /^st/ ] } } )
上面的例子中输出test数据库文档中,tags数组里面至少有一个元素要么以 be 开头或者以 st 开头的文档。
下一篇: Mongodb $nin操作符