MongoDB 查询操作的实例详解
发布时间 - 2026-01-11 03:22:59 点击率:次MongoDB 查询操作的实例详解

使用find或findOne进行查询。并可以进行范围查询、数据集查询、不等式查询,以及其他的一些查询。
查询将会返回DBcursor 游标只有在你需要的时候返回文档
针对游标返回的文档(结果集) 进行操作 例如:忽略一定数量的结果,或者返回结果的数量,以及对结果的排序。
1.指定需要返回的键
有时候仅仅对文档的某几个键值感兴趣,可以屏蔽返回的不感兴趣的键值,返回感兴趣的键值
mongos> db.blog.find({},{“name”:1})
{ “_id” : ObjectId(“5659836e73c8340448fa470e”) }
{ “_id” : ObjectId(“565e5c0e73c8340448fa470f”) }
{ “_id” : ObjectId(“565f998e73c8340448fa4710”) }
{ “_id” : 1, “name” : “zmkzmkzmkzmkzmk” }
{ “_id” : 2, “name” : “zmkzmkzmkzmkzmk” }
{ “_id” : 3, “name” : “zmkzmkzmkzmkzmk” }
{ “_id” : ObjectId(“566004d173c8340448fa4712”), “name” : “zmk” }
可以这样:
mongos> db.blog.find({},{“name”:1,”_id”:0})
{ “name” : “zmkzmkzmkzmkzmk” }
{ “name” : “zmkzmkzmkzmkzmk” }
{ “name” : “zmkzmkzmkzmkzmk” }
{ “name” : “zmk” }
指定返回的键值,是查询结果更高效。此接口可用于条件查询,方便结果处理。
2.查询条件
比较操作符
"$lt"、"$lte"、“$gt”,“$gte” 分别对应 <,<=,>,>=。
小贴士:在mongodb shell中定义方法的大概格式:
mongos> var insertName=function(){
… for(var i=0;i<10;i++){
… db.blog.insert({“_id”:1,”name”:”zmk”+i})
… }
… }
mongos> insertName()
效果:
mongos> db.blog.find()
{ “_id” : 1, “name” : “zmk0” }
{ “_id” : 0, “name” : “zmk0” }
{ “_id” : 2, “name” : “zmk2” }
{ “_id” : 3, “name” : “zmk3” }
{ “_id” : 4, “name” : “zmk4” }
{ “_id” : 5, “name” : “zmk5” }
{ “_id” : 6, “name” : “zmk6” }
{ “_id” : 7, “name” : “zmk7” }
{ “_id” : 8, “name” : “zmk8” }
{ “_id” : 9, “name” : “zmk9” }
观察下面的效果,find可以使用“$lt”<来查询文件插入的时间
mongos> db.blog.insert({“_id”:10,”time”:new Date()})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.find({“time”:{“$lt”:new Date()}})
{ “_id” : 10, “time” : ISODate(“2015-12-05T12:08:53.469Z”) }
3.查询数组
1.$all
应用于多个元素匹配数组,且并无顺序。
mongos> db.blog.insert({“_id”:1,”fruit”:[“apple”,”banana”,”peach”]})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.insert({“_id”:2,”fruit”:[“apple”,”kumquat”,”orange”]})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.insert({“_id”:3,”fruit”:[“cherry”,”banana”,”apple”]})
WriteResult({ “nInserted” : 1 })
mongos> db.blog.find({“fruit”:{$all:[“apple”,”banana”]}})
{ “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
{ “_id” : 3, “fruit” : [ “cherry”, “banana”, “apple” ] }
对数组进行精确匹配,可以使用key.index语法指定下标
mongos> db.blog.find({“fruit.2”:”peach”})
{ “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
2.$size
查询特定长度的数组。
mongos> db.blog.find({“fruit”:{$size:3}})
{ “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
{ “_id” : 2, “fruit” : [ “apple”, “kumquat”, “orange” ] }
{ “_id” : 3, “fruit” : [ “cherry”, “banana”, “apple” ] }
可以再存有数组的文档中添加size键,每一次向指定数组中添加元素,同时增加“size”的值,自增操作非常快,对性能不影响。
3.slice
可以返回某个键匹配的数组元素的一个子集
mongos> db.blog.find({“fruit”:{size:3}},{"fruit":{"slice”:-2}})
{ “_id” : 2, “fruit” : [ “kumquat”, “orange” ] }
{ “_id” : 3, “fruit” : [ “banana”, “apple” ] }
4.查询内嵌文档
点语法即可
mongos>db.people.find({“name.first”:”Joe”,”name.last”:”Schmoe”})
要正确的指定一组元素,而不必指定每个键,则需要使用$elemMatch 用来在查询条件中不非指定匹配数组中的单个内嵌文档。
db.blog.find({“comments”:{“$elemMatch”:
{“author”:”joe”,”score”:{“$gte”:5}}}})
5.limit、skip和sort
三个方法可以组合进行分页.
比如你有一个在线商店,有人搜索mp3,若想每页返回50个结果,而且按照价格从高到低升序排列。
db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
db.stock.find({“des”:”mp3”}).skip(50).limit(50).sort({“price”:-1})
……
然而略过太多会导致性能问题。
解决方法:尽量避免使用skip略过大量结果。
var page1=db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
var lastest=null;//解决方法,将游标最后一个文档记录下来,成为第二次查询的条件的一部分
while(page1.hasNext()){
lastest=page1.next();
display(lastest);
}
var page2=db.stock.find({“des”:”mp3”},{“price”:{$gt:lastest.price}}).limit(50).sort({“price”:-1})
……
随机选取文档
正确方法是在插入文档时插入一个随机值的键,然后按照普通查询进行find()即可。
感谢阅读,如有疑问请留言或者到本站社区交流讨论,谢谢大家对本站的支持!
# MongoDB
# 查询
# 查询的实例详解
# 查询实例
# MongoDB数据库条件查询技巧总结
# MongoDB基础之查询文档
# 常用的MongoDB查询语句的示例代码
# 详解MongoDB的条件查询和排序
# MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)
# MongoDB多条件模糊查询示例代码
# MongoDB数据查询方法干货篇
# MongoDB的查询方法
# MongoDB的一些常用查询方法
# MongoDB实现查询、分页和排序操作以及游标的使用
# 文档
# 键值
# 感兴趣
# 可以使用
# 解决方法
# 内嵌
# 组中
# 升序
# 几个
# 是在
# 太多
# 多个
# 将会
# 如有
# 其他的
# 你有
# 每页
# 分页
# 应用于
# 谢谢大家
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
实例解析Array和String方法
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
如何快速搭建高效简练网站?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
中山网站推广排名,中山信息港登录入口?
如何快速登录WAP自助建站平台?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Firefox Developer Edition开发者版本入口
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel怎么在Blade中安全地输出原始HTML内容
大连 网站制作,大连天途有线官网?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
如何在IIS中新建站点并配置端口与物理路径?
如何在服务器上三步完成建站并提升流量?
公司门户网站制作流程,华为官网怎么做?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
长沙企业网站制作哪家好,长沙水业集团官方网站?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
怎么用AI帮你为初创公司进行市场定位分析?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何在新浪SAE免费搭建个人博客?
网站页面设计需要考虑到这些问题
如何用已有域名快速搭建网站?
高端网站建设与定制开发一站式解决方案 中企动力
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
,怎么在广州志愿者网站注册?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
浅谈Javascript中的Label语句
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel如何使用Collections进行数据处理?(实用方法示例)
如何快速重置建站主机并恢复默认配置?
如何用5美元大硬盘VPS安全高效搭建个人网站?
详解Android中Activity的四大启动模式实验简述
Linux系统命令中screen命令详解
如何彻底卸载建站之星软件?
浅述节点的创建及常见功能的实现
javascript基本数据类型及类型检测常用方法小结
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)

