Mongodb $in操作符

Posted by 撒得一地 on 2016年3月30日 in Mongodb教程

$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 开头的文档。

上一篇:

下一篇:

相关推荐

网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.