MongoDB数据库文档操作
前面的话
本文将详细介绍MongoDB数据库关于文档的增删改查
插入文档
要将数据插入到 MongoDB 集合中,需要使用 MongoDB 的 insert()
或save()
方法,还有insertOne()或insertMany()方法
【insert()】
insert()
命令的基本语法如下
db.COLLECTION_NAME.insert(document)
在插入的文档中,如果不指定_id
参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。_id
为集合中的每个文档唯一的12
个字节的十六进制数
_id,又称为ObjectId
是一个12字节的BSON
类型字符串。按照字节顺序依次代表:
4字节:UNIX时间戳
3字节:表示运行MongoDB的机器
2字节:表示生成此_id的进程
3字节:由一个随机数开始的计数器生成的值
如果数据库中不存在集合,则MongoDB将创建此集合,然后将文档插入到该集合中

要在单个查询中插入多个文档,可以在insert()
命令中传递文档数组
[注意]使用insert()插入多个文档时,很容易出现问题。最好使用insertMany()方法插入

可以使用js语法,插入多个文档

【save()】
插入文档也可以使用db.post.save(document)
。 如果不在文档中指定_id
,那么save()
方法将与insert()
方法一样自动分配ID的值。如果指定_id
,则将以save()
方法的形式替换包含_id
的文档的全部数据。
也就是说save()方法和insert()方法的区别是,save()方法可以复写或修改,而insert()方法不可以
db.post.save(document)


【insertOne()】
使用db.collection.insertOne()
方法可以将单个文档插入到集合中

【insertMany()】
使用db.collection.insertMany()
方法可以将多个文档插入到集合中

查询文档
【find()】
要从MongoDB集合查询数据,需要使用MongoDB的find()
方法,默认返回结果中的前20条文档,输入"it"显示接下来的20条文档。
find()
命令的基本语法如下:
db.COLLECTION_NAME.find(document)
find()
方法将以非结构化的方式显示所有文档

可以限定查询条件

可以通过find 的第二个参数来指定返回的键,值为1或true表示显示该键,值为0或false表示不显示该键

find()方法下的count()方法可以显示符合条件的文档数量

【findOne()】
findOne()
方法只返回一个文档,该文档是最早被添加的文档

【比较操作符】
小于 {<key>:{$lt:<value>}}
小于或等于 {<key>:{$lte:<value>}}
大于 {<key>:{$gt:<value>}}
大于或等于 {<key>:{$gte:<value>}}
不等于 {<key>:{$ne:<value>}}
等于 {<key>:{$eq:<value>}}
取得x小于2的值

取得x大于等于2的值

取得x不等于2的值

【逻辑操作符】
可以使用逻辑操作符$and、$or来表示与、或
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }

【正则表达式】
文档查询可以使用正则表达式,但只支持字符串类型的数据

【$where】
$where操作符功能强大而且灵活,它可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数

使用字符串

使用函数

限制与跳过
【limit()】
如果需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数
默认返回结果中的前20条文档,输入"it"显示接下来的20条文档
如果没有指定limit()方法中的参数则显示集合中的所有数据
db.COLLECTION_NAME.find().limit(NUMBER)

【skip()】
可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数
db.COLLECTION_NAME.find().skip(NUMBER)

排序
【sort()】
在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列
db.COLLECTION_NAME.find().sort({KEY:1})

更新文档
MongoDB 使用update()或save()方法来更新集合中的文档
【update()】
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(<query>,<update>,{upsert:<boolean>, multi: <boolean>,writeConcern:<document>})
query : update的查询条件,类似sql update查询内where后面的
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
writeConcern :可选,抛出异常的级别
[注意]经过测试,upsert参数无法设置为true或者false,都可以插入新的字段

mongodb默认只更新找到的第一条记录,将x:1,更新为x:10

要特别注意的是,如果不使用$set,则将文档的内容替换为x:10

更新全部记录,将x:10,更新为x:1

mongodb默认只添加到更新找到的第一条记录,将x:1的记录,添加z:1

将找到的x:2的全部记录,添加z:2

【save()】
save()方法可以插入或更新文档,如果参数中的文档的_id与集合中所存在的_id都不同,则插入;如果相同,则更新

删除文档
MongoDB remove()函数是用来移除集合中的数据
【remove()】
默认地,mongodb删除符合条件的所有文档
db.collection.remove(<query>,{justOne: <boolean>, writeConcern: <document>})
query :删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
只删除符合条件的第一个文档

删除符合条件的所有文档

MongoDB数据库文档操作的更多相关文章
- MongoDB入门---文档操作之增删改
之前的两篇文章,已经分享过关于MongoDB的集合还有数据库的各种操作,接下来就涉及到最主要的喽,那就是数据方面的操作,在这里叫做文档操作.话不多说,大家来看正文. 首先来看一下它的数据结构: ...
- MongoDB (八) MongoDB 文档操作
一. MongoDB 插入文档 insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert() 或 save() 方法. 语法 insert() 命令的基 ...
- MongoDB的文档、集合、数据库(二)
为了理解MongoDB的名词,可以将其于关系型数据库进行对比: 一.文档 概述 文档是MongoDB的核心概念,是数据的基本单元,非常类似于关系数据库中的行.在MongoDB中,文档表示为键值对的一个 ...
- mongodb安装,库操作,集合操作(表),文档操作(记录)
安装 1.下载地址 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi 2.如果报没 ...
- MongoDB系列---集合与文档操作03
MongoDB-——Collection 学习大纲: 1.集合操作 2.文档操作 知识回顾: 上一篇我们讲述了如何对MongoDB的权限和用户进行日常的基本操作,来达到我们对数据库的基本安全保障. 一 ...
- mongoDB文档操作【增删改】
MongoDB 插入文档 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 Mo ...
- mongodb查询文档
说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb ...
- 第一篇:一天学会MongoDB数据库之Python操作
本文仅仅学习使用,转自:https://www.cnblogs.com/suoning/p/6759367.html#3682005 里面新增了如果用用Python代码进行增删改查 什么是MongoD ...
- 【C#附源码】数据库文档生成工具支持(Excel+Html)
[2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...
随机推荐
- 用NIO实现http协议
先来看一下本篇博文的目录: 一:简介Nio 二:Nio的好处 三:关于http协议 四:代码实现 五:总结 一:简介Nio 我们都知道io流,那么NIO是什么呢?本篇博文将会带你一探NIO,NIO的全 ...
- 常见的几种Flume日志收集场景实战
这里主要介绍几种常见的日志的source来源,包括监控文件型,监控文件内容增量,TCP和HTTP. Spool类型 用于监控指定目录内数据变更,若有新文件,则将新文件内数据读取上传 在教你一步搭建Fl ...
- java中static关键字的作用
java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...
- 16.3Sum Closet
思路: 暴力,复杂度为 \(O(n^3)\),超时 class Solution { public: int threeSumClosest(vector<int>& nums, ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...
- [0] WCF开发下,提示HTTP 无法注册 URL 进程不具有此命名空间的访问权限
Visual Studio以管理员的身份运行就可以了.
- 微信支付生成带logo的二维码
利用到一个qrcode类 比较简洁 原作者没有加入二维码嵌入logo的功能 在这里我进行了小小的修改 可以实现生成微信支付二维码时打上logo 生成png格式的利用到该类中的png方法(我已经改好了) ...
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int m ...
- 2.配置Spring+SpringMvc+Mybatis(分库or读写分离)--Intellij IDAE 2016.3.5
建立好maven多模块项目后,开始使用ssm传统的框架: 1.打开总工程下的pom.xml文件:添加如下代码: <!--全局的所有版本号定义--> <properties> & ...
- ecshop邮件订阅按“订阅”没反应
原订阅邮件所使用的JS文件transport.js和JQuery冲突,会更改transport.js文件,用以下代码可同样实现订阅功能. <input type="text" ...