find的多条件查询


很多时候我们需要查询的值不只是有一个简单的条件,比如我们现在要查询一下同事中是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" } }

文章作者: 技术潘
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 技术潘 !
  目录