MongoDB基础教程:find 查询之条件查询($lt\$gt\$lte\$gte\$or\$not)

转载:原文链接:原文链接出处,点击跳转

查询不仅能像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.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取反查询

"$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"与正则表达式联合使用时极为有用,用来查找哪些与特定模式不匹配的文档。

 

你可能感兴趣的:(MongoDB,MongoDB)