文档的插入和查询 | 学习笔记

简介: 快速学习 文档的插入和查询

开发者学堂课程【MongoDB精讲课程(上):文档的插入和查询学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/726/detail/12955


文档的插入和查询


内容介绍:

一、文档的插入

二、查询

 

一、文档的插入

文档的插入分为单个文档插入和多个文档插入,调用的命令是 db.collection.insert

使用 insert()save()方法向集合中插入文档,语法如下:

db.collection.insert(

<document or array of documents>

{

writeConcern: <document>,

ordered: <boolean>

}

}

collection 不是固定的,而是集合的名称。之前内容讲解过如果没有集合就会隐式创建一个集合。

insert 中可以带如下参数:

Parameter

Type

Description

document

document or array

要插入到集合中的文档或文档数组。(json 格式)

writeConcern

document

Optional. A document expressing the write concern.Omit to use the default write concern. See Write Concern.Do not explicitly set the write concern for the operation if run in a transaction.To use write concern with transactions,see Transactions and Write Concern.

ordered

boolean

可选。如果为真,则按顺序插入数组中的文档,如果其中—个文档出现错误,MongoDB 将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继卖处理数组中的主文档。在版本2.6+中默认为 true

参数中实际用到documentdocument json 格式,存储完后为 BSON。其它两个仅作了解。writeConcern 代表插入时选择的一个包括性能和可靠性的级别。ordered 代表是否排序,插入的数据是否排序。

如果是单个插入使用 insert save 都可,两者等价。

示例:

要向 comment 的集合()中插入一条测试数据:

db.comment.insert({"articleid" : "100000" , " content" : "今天天气真好,阳光明媚" ,"userid": "1001 " , "nickname" : "Rose " , "createdatetime" : newDate() , "likenum " :NumberInt(10), "state" : null})

打开 cmd 窗口,直接 copy 上述代码回车,comment 在该数据库中没有,是直接插入一条文档,文档使用 json 格式。插入完成后结果显示 WriteResult({nInserted:1})

 

二、查询

插入后进行查询,查询数据的语法格式如下:

db. collection.find(<query>[projection])

所以输入 db. comment.find()

结果显示数据已经被插入成功。

再来输入

show collections

会发现 comment 集合也被隐式创建。

以上是单个查询,再来介绍多个查询:

多个查询不再使用 insert 语句而是 insertMany

语法:

db.collection.insertMany(

[ <document 1> , <document 2>...]

{

writeConcern: <document>,

ordered: <boolean>

}

}

Many 中放置类似 json 数组

示例:

批量插入多条文章评论

db. comment.insertMany([

{:"_id": "1" , "articleid" : "100001" , "content" : "我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。" , " userid": "1002" , "nickname" : "相忘于江湖 , "createdatetime " : new Date("2019-08-05T22:08:15.522Z"),"likenum " : NumberInt(1000) , "state" : "1"}

{"_id": "2" , "articleid" : "100001" , "content":"我夏天空腹喝凉开水,冬天喝温开水" , "userid" : "1005" , "nickname" :"伊人憔悴", "createdatetime" : new Date("2019-08-05T23:58:51.485Z"),"likenum " : NumberInt(888), "state" : "1"}

{"_id": "3" , " articleid" : "100001" , " content": "我一直喝凉开水,冬天夏天都喝。" ,"userid" : "1004" , "nickname " : "杰克船长", "createdatetime " :new Date("2019-08-06T01:05:06.321Z"),"likenum " : NumberInt(666), "state" : "1"}

{"_id" : "4" , "articleid" : "100001" , "content" : "专家说不能空腹吃饭,影响健康。" , "userid" :"1003" , "nickname" :"凯撒" , "createdatetime" : new Date("2019-08-06T08:18:35.288Z"),"likenum " : NumberInt(2000) , "state" : "1"}

{"_id": "5" , "articleid" : "100001" , " content" : "研究表明,刚烧开的水千万不能喝,因为烫嘴。" , "userid" : "1003" , "nickname" : "凯撒" , "createdatetime" : new Date("2019-08-06T11:01:02.521Z"),"likenum " : NumberInt(3000) , "state" : "1"}

])

将上述代码复制到窗口

image.png

可以看到查询成功,上述查询的为一条语句,再来尝试 find,输入

db.comment.find()

结果就会显示多条数据。

db.comment.find()是查询所有。

目前 articleid 有多个,现只需要查询其中一个例如100001,也可以通过 json 格式带参数。输入

db.comment.find({articleid:100001})

结果就返回 articleid 100001的多条数据。如果只想返回第一条数据输入

db.comment.findOne({articleid:100001})

结果如图

image.png

投影查询:

上述查询的字段太多,要求只显示部分字段,例如只想显示 articleid userid。在关系数据库中 select 不用*用部分字段即可。MongDB 同样可以实现:在 find 时带上一些参数,在 db.comment.find({articleid:100001})后还可以加一个 json 格式的参数

例如输入

db.comment.find({articleid:100001},{articleid:1})代表只显示 articleid 1的字段

image.png

显示结果如图,_id 默认显示,可以排除,再输入

db.comment.find({articleid:100001},{articleid:1,_id:0})

强制将_id 排除,此时结果只会显示 articleid

多个查询类似,都可以在后面添加字段。

相关文章
|
3月前
|
自然语言处理 计算机视觉 Python
SoccerNet 2025挑战赛:赛题整理(一)
介绍SoccerNet数据集和SoccerNet 2025挑战赛,并梳理SoccerNet 2025挑战赛中的赛题一
421 96
|
8月前
|
存储 缓存 关系型数据库
MySQL为什么需要主键
本文介绍了MySQL中主键的重要性及最佳实践。主键用于唯一标识表中的每一行,其值必须唯一且不允许为空。主键有助于简化更新和删除操作,避免影响无关行。推荐使用与业务无关的自增ID作为Innodb表的主键,以优化存储结构、减少碎片并提高性能。此外,文章还提到不更新、不重用主键值以及避免使用可能变更的字段(如邮箱)作为主键的良好习惯。最后强调了紧凑索引结构对查询效率的关键作用。
244 0
MySQL为什么需要主键
|
9月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
日前,阿里云PolarDB云原生数据库以超越原记录2.5倍的性能一举登顶TPC-C基准测试排行榜,以每分钟20.55亿笔交易(tpmC)和单位成本0.8元人民币(price/tpmC)的成绩刷新TPC-C性能和性价比双榜的世界纪录。 每一个看似简单的数字背后,都蕴含着无数技术人对数据库性能、性价比和稳定性的极致追求,PolarDB的创新步伐从未止步。「阿里云瑶池数据库」公众号特此推出「PolarDB登顶TPC-C技术揭秘」系列硬核文章,为你讲述“双榜第一”背后的故事,敬请关注!
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
|
9月前
|
自然语言处理 数据库 iOS开发
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
667 12
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
|
Android开发 C++
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
1521 0
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
|
9月前
|
SQL 存储 运维
【赵渝强老师】达梦数据库的客户端工具
本文介绍了达梦数据库的多种工具及其使用方法,包括disql交互式查询工具、数据库配置助手DBCA、DM管理工具、DM服务查看器、DM控制台工具、DM数据迁移工具、DM性能监视工具以及DM审计分析工具。每种工具的功能和操作步骤均有详细说明,并配有相关图片和代码示例,帮助用户更好地理解和使用这些工具,提升数据库管理和维护效率。
1018 1
|
10月前
|
人工智能 监控 物联网
写在2025 MWC前夕:AI与移动网络融合的“奇点时刻”
2025年MWC前夕,AI与移动网络融合迎来“奇点时刻”。上海东方医院通过“思维链提示”快速诊断罕见病,某金融机构借助AI识别新型欺诈模式,均展示了AI在推理和学习上的飞跃。5G-A时代,低时延、大带宽特性支持端云协同,推动多模态AI感知能力提升,数字孪生技术打通物理与数字世界,助力各行业智能化转型。AI赋能移动网络,实现智能动态节能和优化用户体验,预示着更聪明、绿色、高效的未来。
215 1
阿里云怎么注册商标?(附详细商标注册申请操作流程)
阿里云商标注册分为商标智能注册申请、商标顾问注册申请和商标安心注册申请,本文阿小云以商标智能注册申请为例来详细说下阿里云商标申请图文操作流程:
6553 0
阿里云怎么注册商标?(附详细商标注册申请操作流程)
|
存储 自然语言处理 算法
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
MySQL中的索引包括普通索引、全文索引、单列索引、多列索引和空间索引等。
621 0
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式