很多时候我们需要查询的值不只是有一个简单的条件,比如我们现在要查询一下同事中是20岁和26岁的,还比如我们要查询同事中大于25岁并且会PhotoShop技能的。MongoDB在这方面也支持的很好。
$in修饰符
$in修饰符可以轻松解决一键多值的查询情况。就如上面我们讲的例子,现在要查询同事中年龄是20岁和26岁的信息。
db.workmate.find(
{age:{$in:[20,26]}},
{name:1,"skill.skillOne":1,age:1,_id:0}
)
结果为:
{ "name" : "panda", "age" : 20, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "xiaowang", "age" : 26, "skill" : { "skillOne" : "PhotoShop" } }
与$in相对的修饰符是$nin,就是查询除了$in条件以外的值。
db.workmate.find(
{age:{$nin:[20,26]}},
{name:1,"skill.skillOne":1,age:1,_id:0}
)
结果为:
{ "name" : "panpan", "age" : 24, "skill" : { "skillOne" : "HTML+CSS" } }
$or修饰符
它用来查询多个键值的情况,就比如查询同事中大于25岁或者会HTML+CSS的信息。主要区别是两个Key值。$in修饰符是一个Key值,这个需要去比较记忆。
db.workmate.find({$or:[
{age:{$gte:25}},
{"skill.skillOne":'HTML+CSS'}
]},
{name:1,"skill.skillOne":1,age:1,_id:0}
)
结果为:
{ "name" : "panpan", "age" : 24, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "panda", "age" : 20, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "xiaowang", "age" : 26, "skill" : { "skillOne" : "PhotoShop" } }
与$or相对的修饰符是$nor,就是查询除了$or条件以外的值。
db.workmate.find({$nor:[
{age:{$gte:25}},
{"skill.skillOne":'HTML+CSS'}
]},
{name:1,"skill.skillOne":1,age:1,_id:0}
)
结果为:
{ "name" : "jspan", "age" : 20, "skill" : { "skillOne" : "PhotoShop" } }
$and修饰符
$and用来查找几个key值都满足的情况,比如要查询同事中大于25岁并且会PhotoShop的信息,这时需要注意的是这两项必须全部满足。当然写法还是比较简单的。只要把上面代码中的$or换成$and就可以了。
db.workmate.find({$and:[
{age:{$gte:25}},
{"skill.skillOne":'HTML+CSS'}
]},
{name:1,"skill.skillOne":1,age:1,_id:0}
)
结果为:
{ "name" : "xiaowang", "age" : 26, "skill" : { "skillOne" : "PhotoShop" } }
$not修饰符
它用来查询除条件之外的值,比如我们现在要查找除年龄大于18岁,小于25岁的人员信息。需要注意的是$not修饰符不能应用在条件语句中,只能在外边进行查询使用。
db.workmate.find({
age:{
$not:{
$lte:25,
$gte:18
}
}
},
{name:1,"skill.skillOne":1,age:1,_id:0}
)
结果为:
{ "name" : "xiaowang", "age" : 26, "skill" : { "skillOne" : "PhotoShop" } }