MongoDB增删改查表文档
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
数据类型:
- Object ID :文档的id
- String: 字符串,最常用,必须是utf-8
- Boolean:布尔值,true 或者false
- Integer:整数
- Double:浮点数
- Arrays:数组或者列表,多个值存储到一个键
- Object:用于嵌入文档,即一个值为一个文档
- Null:存储null值
- Timestamp:时间戳
- Date:存储当前日期或时间unix时间格式
概念上来讲:
- MongoDB的集合类似sqlserver的表
- MongoDB的文档类似sqlserver的表数据
- MongoDB的插入更新删除查询文档,就类似SQL的增删改查操作
- 每个Document(文档)都有一个特殊的键 _id ,这个键值是唯一的,相当于关系型数据库中的表的主键
- 将数据插入到 MongoDB 的集合中,就类似于如何将数据插入到表中一样
- 文档的数据结构和 JSON 基本一样。
- 所有存储在集合中的数据都是 BSON 格式。
- BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
目录:
1、MongoDB 插入文档(增)
2、MongoDB 删除文档(删)
3、MongoDB 更新文档(改)
4、MongoDB 查询文档(查)
1、MongoDB 插入文档(增)
MongoDB中插入文档使用 insert() 或 save() 方法向集合中插入文档,语法:
db.集合名.insert(文档内容)
插入文档实例1:
下面是将文档插入到tsemongo库中的tsecollection集合中:
_mongodb_116:3717(mongod-3.6.8-2.0) tsemongo> db.tsecollection.insert({
... user_id: '',
... account: 'MGIFK1SX2',
... password: '75cebbb141e14a2f0953bb94152744d5',
... nickname: 'Tse先生',
... phone: '',
... sex: '男'
... })
Inserted 1 record(s) in 1ms
WriteResult({
"nInserted": 1
})
tsecollection是集合名,如果该集合不在tsemongo数据库中,MongoDB 会自动创建tsecollection集合并插入文档。
查询刚刚插入的文档:
_mongodb_116:3717(mongod-3.6.8-2.0) tsemongo> db.tsecollection.find()
{
"_id": ObjectId("5cda73a19b21847bd9f9db2d"),
"user_id": "10001",
"account": "MGIFK1SX2",
"password": "75cebbb141e14a2f0953bb94152744d5",
"nickname": "Tse先生",
"phone": "13801380000",
"sex": "男"
}
Fetched 1 record(s) in 2ms
也可以定义一个变量的形式插入文档:
tsevar变量,执行了以后显示如下
_mongodb_116:3717(mongod-3.6.8-2.0) tsemongo> tsevar = ({
... user_id: '',
... account: 'MGIFK1SX2',
... password: '75cebbb141e14a2f0953bb94152744d5',
... nickname: 'Tse先生2',
... phone: '',
... sex: '女'
... })
{
"user_id": "10001",
"account": "MGIFK1SX2",
"password": "75cebbb141e14a2f0953bb94152744d5",
"nickname": "Tse先生2",
"phone": "13881388888",
"sex": "女"
}
然后再执行插入操作:
_mongodb_116:3717(mongod-3.6.8-2.0) tsemongo> db.tsecollection.insert(tsevar)
Inserted 1 record(s) in 2ms
WriteResult({
"nInserted": 1
})
插入文档实例2:
插入文档也可以使用 db.tsecollection.save(document) 命令
_mongodb_116:3717(mongod-3.6.8-2.0) tsemongo> tsevar = ({
... user_id: '',
... account: 'MGIFK1SX3',
... password: '75cebbb141e14a2f0953bb94152744d3',
... nickname: 'Tse女士',
... phone: '',
... sex: '女'
... })
{
"user_id": "10003",
"account": "MGIFK1SX3",
"password": "75cebbb141e14a2f0953bb94152744d3",
"nickname": "Tse女士",
"phone": "136613666666",
"sex": "女"
}
再执行插入操作:
_mongodb_116:3717(mongod-3.6.8-2.0) tsemongo> db.tsecollection.save(tsevar)
Inserted 1 record(s) in 2ms
WriteResult({
"nInserted": 1
})
3.2 版本后还有下面两种语法可用于插入文档:
- db.collection.insertOne():向指定集合中插入一条文档数据
- db.collection.insertMany():向指定集合中插入多条文档数据
db.tsecollection.insertOne({"Tse": })
db.tsecollection.insertMany
([
{
"comment": "1.删除数据库-先use库名再执行drop",
"command": "db.dropDatabase()"
},
{
"comment": "2.删除集合(1、先use库名),到所在的库),2、show collections查看库中所有集合)",
"command": "db.集合名.drop()"
}
])
2、MongoDB 删除文档(删)
MongoDB remove()函数是用来移除集合中的数据。
MongoDB数据更新可以使用update()函数。
在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
语法:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
实例1:
先插入一条数据
db.collection.insert({a:'',b:'Tse先生',c:'20岁'})
再查下一下这条数据是否顺利插入
db.collection.find()
然后再删除这条数据,再去查询,就已经删掉这条数据了
db.collection.remove({b:'Tse先生'})
如果你只想删除第一条找到的记录,使用deleteOne,如下所示:
这边先插入3条数据:
db.collection.insert({a:'',b:'Tse先生',c:'20岁'})
db.collection.insert({a:'',b:'Tse先生',c:'22岁'})
db.collection.insert({a:'',b:'Tse先生',c:'23岁'})
然后再删除第一条找到的记录:
db.collection.deleteOne({b:'Tse先生'})
这边remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法。
如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):
db.collection.remove({})
db.collection.deleteMany({})
删除b等于Tse先生的全部文档:
db.collection.deleteMany({ b:'Tse先生' })
删除b等于Tse先生的一个文档:
db.collection.deleteOne({ b:'Tse先生'})
提示:在实际操作中,阿里云管理mongo的DMS没法支持deleteOne和deleteMany命令,只能用remove命令。
3、MongoDB 更新文档(改)
3.1、MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2
}
)
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
- collation:可选,归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
- arrayFilters:可选的。筛选器文档数组,用于确定要对数组字段进行更新操作要修改的数组元素。
- hint:可选的。指定用于支持查询谓词的索引的文档或字符串。该选项可以采用索引规范文档或索引名称字符串。如果指定的索引不存在,则操作错误。(4.2版本新功能)
实例:
collection这个文档表里面有两条数据,现在把a=4这条改为a=6
db.collection.update({'a':''},{$set:{'a':''}}) #输出消息
WriteResult({
"nMatched" : 1,
"nUpserted" : 0,
"nModified" : 1,
"writeConcernError" : [ ]
})
update后的表数据,显示a已经是6了:
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
db.collection.update({'a':''},{$set:{'a':''}},{multi:true})
3.2、MongoDB弃用该db.collection.save()方法。
而是使用db.collection.insertOne()或 db.collection.replaceOne()代替。
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数说明:
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
db.collection.save({'_id':'5dbb9fd31a2300006c0050c7','a':'','b':'Tse女士','c':'30岁'})
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : "5dbb9fd31a2300006c0050c7",
"writeConcernError" : [ ]
})
3.2版中的新功能。
将文档插入集合中。
该insertOne()方法具有以下语法:
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
db.collection.insertOne({'_id':'5dbb9fd31a2300006c0050c8','a':'','b':'Tse女士','c':'31岁'})
4、MongoDB 查询文档(查)
MongoDB 查询文档使用 find() 方法。
4.1、find() 方法以非结构化的方式来显示所有文档。
语法;
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.collection.find().pretty()
pretty() 方法以美化脚本格式化的方式来显示所有文档。
查询实例:
db.collection.find().pretty()
{
"_id": ObjectId("5dbb9fd31a2300006c0050c6"),
"a": "6",
"b": "Tse先生",
"c": "22岁"
}
{
"_id": ObjectId("5dbb9fd31a2300006c0050c7"),
"a": "5",
"b": "Tse先生",
"c": "23岁"
}
{
"_id": "5dbb9fd31a2300006c0050c7",
"a": "7",
"b": "Tse女士",
"c": "30岁"
}
{
"_id": "5dbb9fd31a2300006c0050c8",
"a": "8",
"b": "Tse女士",
"c": "31岁"
}
Fetched 4 record(s) in 1565ms
4.2、findOne() 方法,它只返回一个文档,不能加pretty
db.collection.findOne()
{
"_id": ObjectId("5dbb9fd31a2300006c0050c6"),
"a": "6",
"b": "Tse先生",
"c": "22岁"
}
4.3、MongoDB 与 (关系型数据库)RDBMS Where 语句比较
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | 关系型数据库RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } |
db.col.find({"by":"Tse先生"}).pretty() |
where by = 'Tse先生' |
小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:100}}).pretty() |
where likes < 100 |
小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:100}}).pretty() |
where likes <= 100 |
大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:100}}).pretty() |
where likes > 100 |
大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:100}}).pretty() |
where likes >= 100 |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:100}}).pretty() |
where likes != 100 |
4.4、MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:
db.collection.find({key1:value1, key2:value2}).pretty()
实例:
下面实例通过_id和a键来查询collection文档表数据
db.collection.find({'_id':'5dbb9fd31a2300006c0050c7', 'a':''}).pretty()
{
"_id": "5dbb9fd31a2300006c0050c7",
"a": "7",
"b": "Tse女士",
"c": "30岁"
}
Fetched 1 record(s) in 2ms
以上实例中类似于SQL中WHERE 语句:WHERE _id='5dbb9fd31a2300006c0050c7' AND a='7'
4.5、MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.collection.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
以下实例中,查询键_id或者a键collection的文档表数据。
db.collection.find({$or:[{'_id':'5dbb9fd31a2300006c0050c7'},{'a':'7'}]}).pretty()
{
"_id": "5dbb9fd31a2300006c0050c7",
"a": "7",
"b": "Tse女士",
"c": "30岁"
}
以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: where a>=5 AND (_id = '5dbb9fd31a2300006c0050c7' OR b = 'Tse先生')
db.collection.find({"a": {$gt:4}, $or: [{"_id":"5dbb9fd31a2300006c0050c6"},{"b": "Tse先生"}]}).pretty()
MongoDB增删改查表文档的更多相关文章
- 数据库——MongoDB增删改查
MongoDB增删改查操作 本文包含对数据库.集合以及文档的基本增删改查操作 数据库操作 #1.增 use config #如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库. #2 ...
- MongoDB - 增删改查及聚合操作
目录 MongoDB - 增删改查及聚合操作 一. 数据库操作(database) 1. 创建及查看库 2. 删除库 二. 集合collectionc=操作(相当于SQL数据库中的表table) 1. ...
- mongodb增删改查操作
Note:mongodb存储的是文档,且文档是json格式的对象,所以增删改查都必须是json格式对象. 注:mongodb常用库和表操作,但mongodb在插入数据时,不需要先创建表. show d ...
- 第二部分 Mongodb增删改查
学习内容:1.mongodb增加操作2.mongodb删除操作3.mongodb查询操作增删改查的高级应用Capped Collection(固定集合)GridFS 大文件上传或下载 1: inser ...
- day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作
在Navicat中把已经生成的表逆向成模型 数据库上,右键-逆向数据库到模型 ego笔记: 增删改查 文件夹(库) 增 create database day43 charset utf8; 改 al ...
- [MongoDB]增删改查
摘要 上篇文章学习了mongodb在windows上的安装,以及如何开启mongodb,最后列举了简单的增删改查操作.本篇将继续深入学习一下增删改查. 相关文章 [MongoDB]入门操作 CRUD ...
- springMVC操作mongoDB增删改查
下面是mongoDb简单的增删改查(新闻类) 附:query.addCriteria(Criteria.where("modelId").ne("").ne(n ...
- Oracle使用JDBC进行增删改查 表是否存在
Oracle使用JDBC进行增删改查 数据库和表 table USERS ( USERNAME VARCHAR2(20) not null, PASSWORD VARCHAR2(20) ) a ...
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
随机推荐
- mac 删除生成的.DS_Store文件,以及设置不再生成此文件
步骤一:删除当前目录下所有隐藏.DS_store文件(请一定要在当前目录执行) sudo find ./ -name ".DS_Store" -depth -exec rm {} ...
- mini_magick上传图片
rails上传图片需要用到的gem: gem 'carrierwave'gem 'mini_magick' 在项目Gemfil中添加上面的两个gem,然后bundle install 然后创建modl ...
- Nginx(三)--Nginx 的高可用
1. Nginx 进程模型简介 多进程+多路复用 master 进程 . worker 进程 启动nginx,查看nginx的线程,可以发现: [root@localhost ~]# ps -ef ...
- 2.成产出现 max(vachar2)取值问题
uat 测试结果正确max(9)>max(8),结果生产出现 max(9)>max(12) 原因:字符类型,默认比较第一个字符的ASCII码. 解决方式: max(to_number(va ...
- 测试开源.net 混淆器ConfuserEx
由于公司业务需要简单的把代码加密混淆,于是了解了一下相关的工具然后打算用ConfuserEx试试. 开源地址:https://github.com/yck1509/ConfuserEx/ 下载地址:h ...
- python学习-文件创建读取
# 文件创建 # 读写# 文件存在?不存在?在操作系统上# 读 read r 写 write w# 打开一个文件# fs = open("xiaojian.txt",encodin ...
- android studio 点击后,不打开上次的项目,
取消勾选Reopen last project on startup选项,
- Node Js模块讲解
Node JS模块 所谓的Node JS模块其实就是指Node JS package,即nodejs包. 一 什么是NodeJS模块? 在说这个问题之前,我们有必要提出一个概念,即模块规范. 现阶段J ...
- Mysql服务彪高排查方式及索引的正确使用步骤
原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/12af580d-1 ...
- Ajax之调用一言网站API接口
Ajax的作用,主要是实现局部刷新. 通过老大哥告知,Ajax接口可以使用一言网站的,所以自己就练了一下子. 本文所有用到的接口都来自一言网站:https://hitokoto.cn/api 通过网站 ...