• 售前

  • 售后

热门帖子
入门百科

详解MongoDB的条件查询和排序

[复制链接]
俺乃小潜mg 显示全部楼层 发表于 2021-8-14 14:32:00 |阅读模式 打印 上一主题 下一主题
目次


  • find 方法
  • 条件组合
  • 比较操作符
  • IN 查询
  • 限制返回效果条数和跳过数据
  • 排序
  • 总结

find 方法


查询的根本格式是db.collection.find({条件}),其中条件是可选的,类似于 MySQL 的 WHERE 条件一样。示比方下:
  1. //  查找全部文档
  2. db.collection.find({});
  3. // 查找指定条件的文档
  4. db.collection.find({key: value});
  5. // 查找昵称为岛上码农的用户
  6. db.users.find({nickname: '岛上码农'});
复制代码
条件组合


可以利用 $and、$or 和 $not 来设置组合条件。
  1. // AND 查询格式
  2. db.collection.find({
  3.   $and: [
  4.     {key1: value1}, {key2: value2}
  5.   ]
  6. });
  7. // OR 查询格式
  8. db.collection.find({
  9.   $or: [
  10.     {key1: value1}, {key2: value2}
  11.   ]
  12. });
  13. // NOT 查询格式
  14. db.collection.find(
  15.     {key: {$not: {条件表达式}}
  16. );
复制代码
比方下面的 users数据集:
  1. [
  2.   {nickname: '岛上码农', score: 90, gender: 'male'},
  3.   {nickname: '玛丽', score: 98, gender: 'female'},
  4.   {nickname: 'Tom', score: 76, gender: 'male'}
  5. ]
复制代码
查找分数是90或76分的用户:
  1. db.users.find({
  2.   $or: [
  3.     {score: 90}, {score: 76}
  4.   ]
  5. });
复制代码
查找性别不是 male 的用户和查找分数高于80分用户:
  1. db.users.find({
  2.   gender: {$not: {$eq: 'male'}}
  3. });
  4. db.users.find({
  5.   score: {$not: {$lt: 80}}
  6. });
复制代码
其中$eq为相称条件,$lt为小于条件。 条件可以嵌套利用,比方and和and和or 嵌套,体现(a || b) && (c || d),格式如下:
  1. // AND与OR 嵌套查询格式
  2. db.collection.find({
  3.   $and: [
  4.     {$or: [{key1: value1}, {key2: value2}]},
  5.     {$or: [{key3: value1}, {key4: value2}]},
  6.   ]
  7. });
  8. //查找 nickename是岛上码农或玛丽,且分数是90或76的用户
  9. db.users.find({
  10.   $and: [
  11.     {$or: [{nickname: '岛上码农'}, {nickname: '玛丽'}]},
  12.     {$or: [{score: 90}, {score: 76}]}
  13.   ]
  14. });
  15. //查找 nickname是岛上码农且分数是90,或nickname是玛丽且分数是76的用户
  16. db.users.find({
  17.   $or: [
  18.     {$and: [{nickname: '岛上码农'}, {score: 90}]},
  19.     {$and: [{nickname: '玛丽'}, {score: 76}]}
  20.   ]
  21. });
  22. //查找nickname是岛上码农,且分数不低于80分的用户
  23. db.users.find({
  24.   $and: [
  25.     {nickname: '岛上码农'},
  26.     {score: {$not:{$lt: 80}}}
  27.   ]
  28. });
复制代码
比较操作符


在 MongoDB 提供了如下比较操作符,比较操作符的格式为{key: {$op: value}}:
       
  • $eq:相称操作符,即 a == b;   
  • $gt:大于,即 a > b;   
  • $gte:大于等于,即 a >= b;   
  • $lt:小于,即 a < b;   
  • $lte:小于等于,即 a <= b。

IN 查询


in 查询的格式和比较操作符类似,只是对应的值是数组,即
  1. db.collection.find({key: {$in: [...]}});
复制代码
比方,需要查找分数为90,76的用户:
  1. db.users.find({score: {$in: [76, 90]}});
复制代码
in 查询也可以和其他条件组合,如and 查询:
  1. db.users.find({
  2. $and: [
  3.    {score: {$in: [76, 90]}},
  4.    {gender: 'male'}
  5.    ]
  6. });
复制代码
限制返回效果条数和跳过数据


find 方法会将所有匹配条件的数据查找出来,因此对于数据集很大的时间会导致速度很慢且产生大量的 磁盘 I/O,如果确定命据只有1条的时间可以利用 findOne,如果要限制查询条数可以利用 limit或 skip。limit 是查询到指定命目后的效果就返回,而 skip 是跳过前面指定命目的效果。
  1. // 查找指定条件的文档的 n 条数据
  2. db.collection.find({key: value}).limit(n);
  3. //示例:查询超过80分的3个用户
  4. db.users.find({score: {$gt: 80}}).limit(3);
  5. // 查找指定条件的文档的,跳过前 n 条数据
  6. db.collection.find({key: value}).skip(n);
  7. //示例: 查询超过80分的用户,跳过前3个
  8. db.users.find({score: {$gt: 80}}).skip(3);
复制代码
排序


排序利用格式如下:
  1. db.collection.find({条件}).sort({key: 1});
复制代码
其中1体现升序,-1体现降序,比方我们需要以分数降序排序:
  1. db.users.find().sort({score: -1});
复制代码
总结


本篇介绍了 MongoDB 的条件查询操作,限制返回条数和排序。可以看到,MongoDB 的操作固然语法和 SQL 差异,但是都有对应的功能辅助查询,对于查询来说也是非常便捷的。
以上就是详解MongoDB的条件查询和排序的详细内容,更多关于MongoDB的条件查询和排序的资料请关注草根技能分享其它干系文章!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作