3.4.2 文档的基本查询

简介: MongoDB使用`find()`查询数据,支持条件筛选与投影。`find({})`查所有文档,`_id`字段默认存在;可指定条件如`{userid:'1003'}`查询匹配记录,用`findOne()`返回第一条。投影参数控制字段显示,如`{userid:1,nickname:1,_id:0}`仅显指定字段,省略 `_id`。

查询数据的语法格式如下:
db.collection.find(, [projection])
(1)查询所有
如果我们要查询spit集合的所有文档,我们输入以下命令
db.comment.find()

db.comment.find({})
这里你会发现每条文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段, MongoDB会自动创建,其类型是ObjectID类型。
如果我们在插入文档记录时指定该字段也可以,其类型可以是ObjectID类型,也可以是MongoDB支持的任意类型。
如果我想按一定条件来查询,比如我想查询userid为1003的记录,怎么办?很简单!只 要在find()中添加参数即可,参数也是json格式,如下:
db.comment.find({userid:'1003'})
如果你只需要返回符合条件的第一条数据,我们可以使用findOne命令来实现,语法和find一样。如:查询用户编号是1003的记录,但只最多返回符合条件的第一条记录:
db.comment.findOne({userid:'1003'})
(2)投影查询(Projection Query):
如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。如:查询结果只显示 _id、userid、nickname :
db.comment.find({userid:"1003"},{userid:1,nickname:1})
{ "_id" : "4", "userid" : "1003", "nickname" : "凯撒" }
{ "_id" : "5", "userid" : "1003", "nickname" : "凯撒" }
默认 _id 会显示。如:查询结果只显示 、userid、nickname ,不显示 _id :
db.comment.find({userid:"1003"},{userid:1,nickname:1,_id:0})
{ "userid" : "1003", "nickname" : "凯撒" }
{ "userid" : "1003", "nickname" : "凯撒" }
再例如:查询所有数据,但只显示 _id、userid、nickname :
db.comment.find({},{userid:1,nickname:1})

相关文章
|
3月前
|
存储 NoSQL MongoDB
3.2 数据库操作
MongoDB中使用`use 数据库名`选择或创建数据库,若不存在则自动创建。通过`show dbs`查看所有数据库,`db`查看当前库。集合需插入文档后才真正创建。数据库名须为非空、小写、不超过64字节的UTF-8字符串,不可含特殊字符。保留库包括admin(权限管理)、local(本地数据)和config(分片信息)。
|
3月前
|
XML NoSQL Java
5.3 技术选型
本节介绍MongoDB的Java连接驱动mongodb-driver及SpringDataMongoDB持久层框架,通过搭建文章微服务工程,配置Spring Boot整合MongoDB,实现项目初始化与启动。
|
3月前
|
存储 NoSQL Linux
2.4 Linux系统中的安装启动和连接
本文介绍在Linux系统部署单机MongoDB用于生产环境的完整步骤,包括下载、解压、目录配置、日志与数据路径设置、配置文件编写及服务启停方法。操作类似Windows,通过配置`mongod.conf`实现后台运行,支持命令行与图形工具连接,并提供防火墙处理与安全关闭服务方案,确保稳定运行。
|
3月前
|
存储 缓存 Java
ThreadLocal
ThreadLocal是线程本地变量,为每个线程提供独立的变量副本,避免线程竞争。每个线程可独享自己的数据,互不干扰。通过get、set、remove方法操作线程私有数据,底层由Thread中的ThreadLocalMap存储,线程结束时自动清理,也可手动调用remove防止内存泄漏。
|
3月前
|
Java 调度
ScheduleExecutorService提交死循环任务
本文探讨向调度线程池提交死循环任务的影响。通过分析`scheduleAtFixedRate`的执行流程,揭示任务如何被包装、调度及执行。死循环将导致线程被永久占用,无法释放,若线程池容量有限,后续任务将被阻塞,影响整体调度。结合延时队列与任务重提交机制,完整呈现周期性任务的运行原理。
|
3月前
|
存储 NoSQL MongoDB
4.2.3 其他索引
MongoDB提供地理空间索引支持平面与球面查询,文本索引实现高效字符串搜索并提取词干,哈希索引则用于散列分片,仅支持等值匹配,提升数据分布随机性。
|
3月前
|
Java 调度
ScheduleExecutorService
当ScheduledExecutorService的调度周期小于任务执行时间时,任务不会并发执行,而是等待前一次完成后再立即执行。因任务被放入延时队列,下次触发时间基于上一次设定周期计算,若未完成则延迟执行,实际调度周期等于任务执行时间,避免了任务堆积和并发冲突。
|
3月前
|
NoSQL MongoDB
3.4.3 文档的更新
MongoDB update语法用于修改集合中的文档,支持覆盖更新与局部更新。使用`$set`可避免字段丢失,`multi: true`实现批量修改,`$inc`则用于数值增减。注意指定查询条件与选项,确保数据准确更新。(238字)
|
3月前
|
存储 NoSQL 关系型数据库
MongoDB相关概念
MongoDB是一款高性能、无模式的文档型数据库,适用于高并发、海量数据、高扩展性场景。广泛应用于社交、游戏、物联网、物流、视频直播等领域,适合数据量大、读写频繁、事务要求不高的应用。支持灵活的JSON-like文档存储,具备高可用、水平扩展、地理查询等优势,是Web2.0和大数据时代的理想选择。
InheritableThreadLocal
ThreadLocal子线程无法继承父线程变量,而InheritableThreadLocal可实现父子线程间数据传递。其原理是在Thread初始化时,复制父线程的inheritableThreadLocals到子线程,通过createInheritedMap创建新的ThreadLocalMap,实现值的继承,适用于需传递上下文的场景。