文章目录
- Document 操作
- 1 新增文档
- 1.1 新增单一文档
- 1.2 批量新增文档
- 1.3 通过变量新增文档
- 2 查询文档
- 2.1 基础应用
- 2.2 pretty函数
- 2.3 单条件逻辑运算符
- 2.4 多条件逻辑运算符
- 2.5 \(type查询</li><li>2.6 正则查询</li><li>2.7 分页查询</li><li>2.8 排序</li></ul><ul data-indent="2"><li>3 更新文档</li></ul><ul data-indent="3"><li>3.1 save更新文档</li><li>3.2 update更新文档</li></ul><ul data-indent="2"><li>4 删除文档</li></ul><ul data-indent="3"><li>4.1 remove函数</li><li>4.2 deleteOne函数</li><li>4.3 deleteMany函数</li></ul><p> <br></p><p>在MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。</p><p>MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。</p><p>BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。</p><h4 id="h2">1 新增文档</h4><h5>1.1 新增单一文档</h5><ul><li>insert函数</li></ul><div></div><ul><li>save函数</li></ul><div></div><ul><li>insertOne函数</li></ul><p>在MongoDB3.2以后的版本中,提供了insertOne()函数用于插入文档。</p><div></div><h5>1.2 批量新增文档</h5><ul><li>insert函数</li></ul><p>向test集合中批量插入多个文档</p><div></div><ul><li>save函数</li></ul><p>向test集合中批量插入多个文档</p><div></div><ul><li>insertMany函数</li></ul><p>在MongoDB3.2以后的版本中,提供了insertMany函数用于插入文档。</p><div></div><h5>1.3 通过变量新增文档</h5><p>Mongo Shell工具允许我们定义变量。所有的变量类型为var类型。也可忽略变量类型。变量中赋值符号后侧需要使用小括号来表示变量中的值。我们可以将变量作为任意插入文档的函数的参数。</p><div></div><ul><li>变量新增单一文档</li></ul><p>定义变量</p><div></div><p>新增文档</p><div></div><ul><li>变量批量新增文档</li></ul><p>定义变量</p><div></div><p>新增文档</p><div></div><h4 id="h3">2 查询文档</h4><p>MongoDB是通过findOne()和find()函数来实现文档查询的。</p><h5>2.1 基础应用</h5><ul><li>findOne函数</li></ul><p>findOne函数用于查询集合中的一个文档。语法如下:</p><div></div><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;"><p>参数解释: query:可选,代表查询条件。<br> projection:可选,代表查询结果的投影字段名。即查询结果需要返回哪些字段或不需要返回哪些字段。</p></blockquote><div></div><p><mark>注意</mark>:在projection中不能使用{‘name’:0, ‘age’:1}这种语法格式,这是错误的语法。projection只能定义要返回的字段或不返回的字段。_id字段是MongoDB维护的字段,是唯一可以在projection中独立使用的。如:{_id:0, ‘name’:1, ‘age’:1}</p><ul><li>find函数</li></ul><p>find函数用于查询集合中的若干文档。语法如下:</p><div></div><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;"><p>参数解释: query:可选,代表查询条件。<br> projection:可选,代表查询结果的投影字段名。即查询结果需要返回哪些字段或不需要返回哪些字段。</p></blockquote><div></div><ul><li>投影约束</li></ul><p>在MongoDB中,_id字段是默认返回显示的投影字段。</p><div></div><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;"><p>非_id字段,在投影约束中不能互斥,否则抛出异常。如:{“name”:1, “age”:0}抛出异常。</p><p>包含_id字段,在投影约束中可以和其他字段互斥约束,但是,_id字段必须为非投影显示约束(0), 如:{“name”:1, “_id”:0}<br> 正确的。</p><p>包含_id字段,在投影约束中,如果和其他字段投影约束互斥,且_id字段投影约束为显示(1),会抛出异常,如:{"_id":1,<br> “name”:0} 抛出异常。 常用方式: {"_id":0, “xxx”:1} {“xxx”:0}</p></blockquote><p><mark>总结:投影时,_id为1的时候,其他字段必须是1;_id是0的时候,其他字段可以是0;如果没有_id字段约束,多个其他字段必须同为0或同为1。</mark></p><h5>2.2 pretty函数</h5><p>pretty函数用于格式化find函数查询结果。让查询结果更易查看。findOne函数自动附带格式化查询结果的能力。<br> 语法:</p><div></div><h5>2.3 单条件逻辑运算符</h5><p>如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:<br></p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog//_670daccd7cf.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='MongoDBCompass如何设置为中文_数据库' title="在这里插入图片描述" style="width: 796px; visibility: visible;"></p><ul><li>在MongoDB中字符串也可以比较大小。按照Unicode编码顺序比较大小。</li><li>日期可以比较大小: 过往 < 现在 < 未来。</li></ul><h5>2.4 多条件逻辑运算符</h5><ul><li>And条件</li></ul><p>MongoDB 的 find() 和 findOne() 函数可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。</p><div></div><ul><li>Or条件</li></ul><p>MongoDB OR 条件语句使用了关键字 \)or,语法格式如下:
- And和Or的配合使用
2.5 \(type查询</h5><p>在MongoDB中根据字段的数量类型来查询数据使用\)type操作符来实现,具体使用法语:
\(type的有效值如下:<br></p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog//_670daccdd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='MongoDBCompass如何设置为中文_数据库_02' title="在这里插入图片描述" style="width: 625px; visibility: visible;"></p><p><br></p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog//_670dacce0e12b17356.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='MongoDBCompass如何设置为中文_Cloud_03' title="在这里插入图片描述" style="width: 626px; visibility: visible;"></p><div></div><h5>2.6 正则查询</h5><p>MongoDB中查询条件也可以使用正则表达式作为匹配约束。<br> 语法:</p><div></div><p>正则表达式格式:/xxx/</p><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;"><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">正则选项:</blockquote><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog//_670dacce3f9fe71258.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='MongoDBCompass如何设置为中文_Cloud_04' title="在这里插入图片描述" style="width: 610px; visibility: visible;"></p></blockquote><div></div><h5>2.7 分页查询</h5><p>在MongoDB中,使用函数limit()和skip()来实现分页数据查询。</p><ul><li>limit函数</li></ul><p>在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。<br> 语法:</p><div></div><p>不使用limit函数,默认查询集合中全部文档。如果limit函数不传递参数,也是查询集合中的全部文档。</p><ul><li>skip函数</li></ul><p>在MongoDB中使用skip()方法来跳过指定数量的文档,skip方法同样接受一个数字参数作为跳过的文档条数。</p><div></div><p>不使用skip函数,不会跳过任何文档,从集合的第一条文档开始查询。如果skip函数不传递参数,也是不跳过任何文档。</p><h5>2.8 排序</h5><p>在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,<mark>其中 1 为升序排列,而 -1 是用于降序排列。</mark></p><div></div><h4 id="h4">3 更新文档</h4><p>MongoDB通过update函数与save函数来更新集合中的文档。</p><h5>3.1 save更新文档</h5><p>save()函数的作用是保存文档,如果文档存在则覆盖,如果文档不存在则新增。save()函数对文档是否存在的唯一判断标准是"_id"系统唯一字段是否匹配。所以使用save()函数实现更新操作,则必须提供"_id"字段数据。</p><div></div><p>参数document代表要修改的文档内容,要求必须提供"_id"字段数据。</p><div></div><h5>3.2 update更新文档</h5><p>update() 函数用于更新已存在的文档。</p><div></div><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;"><p>参数说明:<br> 1.query : update的查询条件,类似sql update更新语法内where后面的内容。<br> 2.update:update的对象和一些更新的操作符等,也可以理解为sql update查询内set后面的。<br> 3.upsert 可选,这个参数的意思是,如果不存在update的记录,是否插入这个document,true为插入,默认是false,不插入。<br> 4.mult: 可选,mongod默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。只有在表达式更新语法中才可使用。</p></blockquote><p>在MongoDB中的update是有两种更新方式,一种是覆盖更新,一种是表达式更新。<br> 覆盖更新:顾名思义,就是通过某条件,将新文档覆盖原有文档。<br> 表达式更新:这种更新方式是通过表达式来实现复杂更新操作,如:字段更新、数值计算、数组操作、字段名修改等。</p><ul><li>覆盖更新</li></ul><p>通过update方法来更新一个完整的文档:</p><div></div><ul><li>表达式更新</li></ul><div></div><p>3.2.2.1 \)inc
用法:{\(inc:{field:value}}<br> 作用:对一个数字字段的某个field增加value<br> 示例:将name为zhangsan的学生的age增加5<br> 命令:db.stu.update({name:“zhangsan”},{\)inc:{age:5}})
3.2.2.2 \(set<br> 用法:{\)set:{field:value}}
作用:把文档中某个字段field的值设为value,如果field不存在,则增加新的字段并赋值为value。
示例:把zhangsan的年龄设为23岁
命令:db.stu.update({name:“zhangsan”},{\(set:{‘age’:23}})</p><p>3.2.2.3 \)unset
用法:{\(unset:{field:1}}<br> 作用:删除某个字段field<br> 示例:将zhangsan的年龄字段删除<br> 命令:db.stu.update({name:“zhangsan”},{\)unset:{age:1}})
3.2.2.4 \(push<br> 用法:{\)push:{field:value}}
作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型
示例:给zhangsan添加别名”xiaozhang”
命令:db.stu.update({name:“zhangsan”},{\(push:{“alias”:“xiaozhang”}})</p><p>3.2.2.5 \)addToSet
用法:{\(addToSet:{field:value}}<br> 作用:加一个值到数组内,而且只有当这个值在数组中不存在时才增加。<br> 示例:往zhangsan的别名字段里添加两个别名A1、A2<br> 命令:db.stu.update({name:“zhangsan”},{\)addToSet:{“alias”:[“A1”,“A2”]}})
注意:此处加入的数据是一个数据为A1和A2的数组对象。并不是将两个数据依次加入alias数组中。
3.2.2.6 \(pop<br> 用法:删除数组内第一个值:{\)pop:{field:-1}}、删除数组内最后一个值:{\(pop:{field:1}}<br> 作用:用于删除数组内的一个值<br> 示例:删除zhangsan记录中alias字段中最后一个别名<br> 命令:db.stu.update({name:“zhangsan”},{\)pop:{“alias”:1}})
3.2.2.7 \(pull<br> 用法:{\)pull:{field:_value}}
作用:从数组field内删除所有等于_value的值
示例:删除zhangsan记录中的别名xiaozhang
命令:db.stu.update({name:“zhangsan”},{\(pull:{“alias”:“xiaozhang”}})</p><p>3.2.2.8 \)pullAll
用法:{\(pullAll:value_array}<br> 作用:用法同\)pull一样,可以一次性删除数组内的多个值。
示例:删除zhangsan记录内的A1和A2别名
命令:db.stu.update({name:“zhangsan”},{\(pullAll:{“alias”:[“A1”,“A2”]}})</p><p>3.2.2.9 \)rename
用法:{\(rename:{old_field_name:new_field_name}}<br> 作用:对字段进行重命名。底层实现是先删除old_field字段,再创建new_field字段。<br> 示例:把zhangsan记录的name字段重命名为sname<br> 命令:db.stu.update({name:“zhangsan”},{\)rename:{“name”:“sname”}})
3.2.2.10 更多案例
4 删除文档
MongoDB是通过remove()函数、deleteOne()函数、deleteMany()函数来删除集合中的文档。
4.1 remove函数
- 4.1.1 删除全部
- 4.1.2 条件删除
4.2 deleteOne函数
参数解释: query:要删除的文档条件,相当于SQL语法中的where子句作用。
4.3 deleteMany函数
参数解释: query:要删除的文档条件,相当于SQL语法中的where子句作用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/206517.html