查询不仅能像MongoDB基础教程:find 查询中说的那样精确匹配,还能匹配更加复杂的条件,比如范围、OR子句和取反。
查询条件
首先我们先来认识比较操作符,下面是全部的比较操作符。
"$lt"less than<"$gt"greater than>"$lte"less than or equal to<="$gte"greater than or equal to>=
我们可以使用上述操作符,将其组合起来以便查找一个范围的值。
例如,查询18~30岁(含)的用户,就可以像下面这样:
> db.users.find({"age" : {"$lte" : 30, "$gte" : 18}})对比SQL语句
> SELECT * FROM `users` WHERE `age` <= 30 AND `age` >= 18;如果我们要查询某个键值不等于指定值,就需要使用到"$ne",它表示不等于,它能用于所有类型的数据。
例如,查询名字不是tom的用户,我们可以像下面这样查询:
> db.users.find({"username" : {"$ne" : "tom"}})对比SQL语句
> SELECT * FROM `users` WHERE `username` != "tom";OR查询
MongoDB 中有两种方式进行 OR 查询:"$in"可以用来查询一个键的多个值; "$or"更通用一些,可以在多个键中查询任意的给定值。
例如,我们需要查询username为tom或Lily的文档:
> db.users.find({"username" : {"$in" : ["tom", "Lily"]}})对比SQL语句
> SELECT * FROM `users` WHERE `username` IN ("tom", "Lily") ;如果要排除username为tom或Lily的文档,可以使用"$nin",它将返回与数组中所有值都不匹配的文档,可以看下面的查询:
> db.users.find({"username" : {"$nin" : ["tom", "Lily"]}})对比SQL语句
> SELECT * FROM `users` WHERE `username` NOT IN ("tom", "Lily") ;我们使用"$in"只能对单个键进行OR查询,如果想要查询username为tom或blog为 https://www.ipaddr.host 的文档,就需要使用"$or"了。"$or"接受一个包含所有可能条件的数组作为参数。
请看下面的查询:
> db.users.find( {"$or" : [{"username" : "tom"}, {"blog" : "https://www.ipaddr.host"}]})对比SQL语句
> SELECT * FROM `users` WHERE `username` = "tom" OR `blog` = "https://www.ipaddr.host";$not取反查询
"$not"是元条件句,即可以用在任何其他条件上。就拿取模运算符"$mod"来说。"$mod"会将查询的值初一第一个给定值,若余数等于第二个给定值则匹配成功:
> db.users.find({"id_num" : { "$mod" : [5, 1] }})对比SQL语句
> SELECT * FROM `users` WHERE MOD(id_num,5) = 1;上面的查询会返回“id_num”值为1、6、11、16等的用户。但要是想返回“id_num”值为2、3、4、5、7、8、9、10、12等的用户,就要用"$not"了:
> db.users.find({"id_num" : { "$not" : { "$mod" : [5, 1] }}})对比SQL语句
> SELECT * FROM `users` WHERE MOD(id_num,5) != 1;"$not"与正则表达式联合使用时极为有用,用来查找哪些与特定模式不匹配的文档。
这篇文章还没有人留言,快来抢沙发吧。