详解MongoDB的条件查询和排序
详解MongoDB的条件查询和排序
目录
- find 方法
- 条件组合
- 比较操作符
- IN 查询
- 限制返回结果条数和跳过数据
- 排序
- 总结
find 方法
查询的基本格式是db.collection.find({条件}),其中条件是可选的,类似于 MySQL 的 WHERE 条件一样。示例如下:
// 查找全部文档 db.collection.find({}); // 查找指定条件的文档 db.collection.find({key: value}); // 查找昵称为岛上码农的用户 db.users.find({nickname: '岛上码农'});
条件组合
可以使用 $and、$or 和 $not 来设置组合条件。
// AND 查询格式 db.collection.find({ $and: [ {key1: value1}, {key2: value2} ] }); // OR 查询格式 db.collection.find({ $or: [ {key1: value1}, {key2: value2} ] }); // NOT 查询格式 db.collection.find( {key: {$not: {条件表达式}} );
例如下面的 users数据集:
[ {nickname: '岛上码农', score: 90, gender: 'male'}, {nickname: '玛丽', score: 98, gender: 'female'}, {nickname: 'Tom', score: 76, gender: 'male'} ]
查找分数是90或76分的用户:
db.users.find({ $or: [ {score: 90}, {score: 76} ] });
查找性别不是 male 的用户和查找分数高于80分用户:
db.users.find({ gender: {$not: {$eq: 'male'}} }); db.users.find({ score: {$not: {$lt: 80}} });
其中$eq为相等条件,$lt为小于条件。 条件可以嵌套使用,例如and和and和or 嵌套,表示(a || b) && (c || d),格式如下:
// AND与OR 嵌套查询格式 db.collection.find({ $and: [ {$or: [{key1: value1}, {key2: value2}]}, {$or: [{key3: value1}, {key4: value2}]}, ] }); //查找 nickename是岛上码农或玛丽,且分数是90或76的用户 db.users.find({ $and: [ {$or: [{nickname: '岛上码农'}, {nickname: '玛丽'}]}, {$or: [{score: 90}, {score: 76}]} ] }); //查找 nickname是岛上码农且分数是90,或nickname是玛丽且分数是76的用户 db.users.find({ $or: [ {$and: [{nickname: '岛上码农'}, {score: 90}]}, {$and: [{nickname: '玛丽'}, {score: 76}]} ] }); //查找nickname是岛上码农,且分数不低于80分的用户 db.users.find({ $and: [ {nickname: '岛上码农'}, {score: {$not:{$lt: 80}}} ] });
比较操作符
在 MongoDB 提供了如下比较操作符,比较操作符的格式为{key: {$op: value}}:
- $eq:相等操作符,即 a == b;
- $gt:大于,即 a > b;
- $gte:大于等于,即 a >= b;
- $lt:小于,即 a < b;
- $lte:小于等于,即 a <= b。
IN 查询
in 查询的格式和比较操作符类似,只是对应的值是数组,即
db.collection.find({key: {$in: [...]}});
例如,需要查找分数为90,76的用户:
db.users.find({score: {$in: [76, 90]}});
in 查询也可以和其他条件组合,如and 查询:
db.users.find({ $and: [ {score: {$in: [76, 90]}}, {gender: 'male'} ] });
限制返回结果条数和跳过数据
find 方法会将所有匹配条件的数据查找出来,因此对于数据集很大的时候会导致速度很慢且产生大量的 磁盘 I/O,如果确定数据只有1条的时候可以使用 findOne,如果要限制查询条数可以使用 limit或 skip。limit 是查询到指定数量后的结果就返回,而 skip 是跳过前面指定数量的结果。
// 查找指定条件的文档的 n 条数据 db.collection.find({key: value}).limit(n); //示例:查询超过80分的3个用户 db.users.find({score: {$gt: 80}}).limit(3); // 查找指定条件的文档的,跳过前 n 条数据 db.collection.find({key: value}).skip(n); //示例: 查询超过80分的用户,跳过前3个 db.users.find({score: {$gt: 80}}).skip(3);
排序
排序使用格式如下:
db.collection.find({条件}).sort({key: 1});
其中1表示升序,-1表示降序,例如我们需要以分数降序排序:
db.users.find().sort({score: -1});
总结
本篇介绍了 MongoDB 的条件查询操作,限制返回条数和排序。可以看到,MongoDB 的操作虽然语法和 SQL 不同,但是都有对应的功能辅助查询,对于查询来说也是十分便捷的。
以上就是详解MongoDB的条件查询和排序的详细内容,更多关于MongoDB的条件查询和排序的资料请关注趣讯吧其它相关文章!
推荐阅读
-
PHP四种基础算法详解
-
php常用操作方法封装(文件处理、数据处理),复制即用
-
PHP对MongoDB数据的处理
-
PHP中国际化的字符串比较对象
在PHP中,国际化的功能非常丰富,包括很多我们可能都不知道的东西其实都非常有用,比如说今天要介绍的这一系列的字符排序和比较的功...
-
「php」php中常用的7种排序&查找&去乱码方法实现
-
PHP二维数组排序
-
「PHP数据结构」交换排序:冒泡、快排
-
一个使用 asyncio 协程的网络爬虫(二)
-
「PHP数据结构」插入类排序:简单插入、希尔排序
-
PHP实现灵活排序
PHP实现灵活排序背景我平时的工作是做数据报表,近期产品提了个需求,要把报表的指标顺序灵活调整。原先的排序是按自增id排序...