转载:原文链接:原文链接出处,点击跳转
查询不仅能像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";
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.qiansw.com 的文档,就需要使用"$or"
了。"$or"
接受一个包含所有可能条件的数组作为参数。
请看下面的查询:
> db.users.find( {"$or" : [{"username" : "tom"}, {"blog" : "https://www.qiansw.com"}]})
对比SQL语句
> SELECT * FROM `users` WHERE `username` = "tom" OR `blog` = "https://www.qiansw.com";
"$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"
与正则表达式联合使用时极为有用,用来查找哪些与特定模式不匹配的文档。