004.MongoDB数据库基础使用
一 数据库管理
1.1 创建数据库
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use admin
> db.grantRolesToUser( "useradmin",[{ role: "dbOwner",db:"mydb" }]) #授权
> use mydb #若存在mymongodb则切换,若不存在则创建
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> db.age01.insert({"name": "xianghongying"})
WriteResult({ "nInserted" : 1 }) #输出信息
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
mydb 0.000GB
1.2 删除数据库
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
switched to db mydb #输出信息
> db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
二 集合管理
2.1 创建集合
db.createCollection(name, options)
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
|
字段
|
类型
|
描述
|
|
capped
|
布尔
|
(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
|
|
autoIndexId
|
布尔
|
(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
|
|
size
|
数值
|
(可选)为固定集合指定一个最大值(以字节计)。
如果 capped 为 true,也需要指定该字段。
|
|
max
|
数值
|
(可选)指定固定集合中包含文档的最大数量。
|
> use mydb
> db.createCollection("age01")
{ "ok" : 1 } #输出信息
> show tables #也可使用show collections
age01
> db.createCollection("age02",{ capped: true, autoIndexId : true, size: 6142800, max: 10000})
{
"note" : "the autoIndexId option is deprecated and will be removed in a future release",
"ok" : 1
}
#创建固定集合 age02,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
> db.age03.insert({"name": "xianghongying","age": "18"})
WriteResult({ "nInserted" : 1 })
> show tables
age01
age02
age03
2.2 删除集合
db.collection.drop()
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> show tables
age01
age02
age03
> db.age03.drop()
true
> show tables
age01
age02
三 文档管理
3.1 插入文档
db.COLLECTION_NAME.insert(document)
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.insert({name: 'zhangsan',
age: '18',
tel: '123456781',
love: ['apple','banana']
})
WriteResult({ "nInserted" : 1 }) #输出信息
3.2 查看文档
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find()
> db.age01.find().pretty()

> lisi_age=({name: 'lisi', age: '19', tel: '123456782', love: ['apple','orange']})
> db.age01.insert(lisi_age)
WriteResult({ "nInserted" : 1 }) #输出信息
> db.age01.find().pretty()

3.3 其他方式
> db.age01.insertOne({name: 'wanger', age: '15', tel: '123456783', love: ['pear','orange']})
向指定集合中插入多条文档数据。
> db.age01.insertMany([{name: 'mazi', age: '15', tel: '123456784', love: ['pear','apple']},{name: 'xiaoming', age: '8', tel: '123456785', love: ['apple','grape']}])

> db.age01.find().pretty()

四 更新文档
4.1 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 :可选,抛出异常的级别。
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.update({name: "xiaoming"},{$set:{love: ['strawberry','orange']}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) #输出信息
> db.age01.find().pretty()

> db.age01.update({age: '15'},{$set:{tel: '133333333'}},{multi:true}) #修改多条
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.age01.find().pretty()

4.2 save方法
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
> db.age01.save({_id: ObjectId("5ceb9b2785cdc85ba0f3d6a3"),name: 'zhangsan', age: '14', tel: '155555555', love: ['peach','waxberry']})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) #输出信心
> db.age01.find().pretty()

4.3 其他方式
> db.age01.updateOne({name: 'lisi'}, {$set:{age: '28'}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.age01.updateMany({age: {$gt: '15'}}, {$set:{tel: '188888888'}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
五 删除文档
5.1 删除文档
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,表示删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find().pretty()

> db.age01.deleteOne({"name" : "xiaoming"})
WriteResult({ "nRemoved" : 1 })
> db.age01.find().pretty()

> db.age01.deleteMany({tel: '133333333'})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.collection.deleteMany({})
六 查询文档
6.1 简单查询
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件。
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find().pretty() #pretty() 方法以格式化的方式来显示所有文档

6.2 多个条件
> db.collection.find({key1:value1, key2:value2}).pretty()
> db.age01.find({age: {$gt:'10'}, tel: '188888888'}).pretty()

> db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
> db.age01.find({$or:[{age: {$gt: '14'}},{tel: '188888888'}]}).pretty()

> db.age01.find({age: {$gt: '10'},$or:[{name: 'zhangsan'},{tel: '188888888'}]}).pretty()

> db.age01.find({age: {$gt: '14',$lt: '28'}}).pretty()

> db.age01.find({name: 'zhangsan'},{name: 1, age: 1}).pretty() #仅显示name和age
{
"_id" : ObjectId("5ceb9b2785cdc85ba0f3d6a3"),
"name" : "zhangsan",
"age" : "14"
}
> db.age01.find({name: 'zhangsan'},{name: 0}).pretty() #不显示name
{
"_id" : ObjectId("5ceb9b2785cdc85ba0f3d6a3"),
"age" : "14",
"tel" : "155555555",
"love" : [
"peach",
"waxberry"
]
}
七 条件操作符
7.1 相关条件
|
操作
|
格式
|
范例
|
RDBMS中的类似语句
|
|
等于
|
{<key>:<value>}
|
db.col.find({"by":"中国"}).pretty()
|
where by = '中国'
|
|
小于
|
{<key>:{$lt:<value>}}
|
db.col.find({"likes":{$lt:50}}).pretty()
|
where likes < 50
|
|
小于或等于
|
{<key>:{$lte:<value>}}
|
db.col.find({"likes":{$lte:50}}).pretty()
|
where likes <= 50
|
|
大于
|
{<key>:{$gt:<value>}}
|
db.col.find({"likes":{$gt:50}}).pretty()
|
where likes > 50
|
|
大于或等于
|
{<key>:{$gte:<value>}}
|
db.col.find({"likes":{$gte:50}}).pretty()
|
where likes >= 50
|
|
不等于
|
{<key>:{$ne:<value>}}
|
db.col.find({"likes":{$ne:50}}).pretty()
|
where likes != 50
|
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find({age: {$gt: '20'}}).pretty()

> db.age01.find({age: {$gte: '15'}}).pretty()

> db.age01.find({age: {$lt: '15'}}).pretty()

> db.age01.find({age: {$lte: '15'}}).pretty()

> db.age01.find({age: {$lt: '18',$gt: '10'}}).pretty()

|
操作
|
格式
|
范例
|
|
包含
|
/<value>/
|
db.col.find({title:/zhangsan/})
|
|
以……开头
|
/^<value>/
|
db.col.find({title:/^zhangsan/})
|
|
以……结尾
|
/<value>$/
|
db.col.find({title:/zhangsan$/})
|
> db.age01.find({love: /apple/}).pretty()

> db.age01.find({tel: /^188/}).pretty()

> db.age01.find({tel: /88$/}).pretty()
八 MongoDB操作符
8.1 操作符
|
类型
|
数字
|
备注
|
|
Double
|
1
|
|
|
String
|
2
|
|
|
Object
|
3
|
|
|
Array
|
4
|
|
|
Binary data
|
5
|
|
|
Undefined
|
6
|
已废弃。
|
|
Object id
|
7
|
|
|
Boolean
|
8
|
|
|
Date
|
9
|
|
|
Null
|
10
|
|
|
Regular Expression
|
11
|
|
|
JavaScript
|
13
|
|
|
Symbol
|
14
|
|
|
JavaScript (with scope)
|
15
|
|
|
32-bit integer
|
16
|
|
|
Timestamp
|
17
|
|
|
64-bit integer
|
18
|
|
|
Min key
|
255
|
Query with -1.
|
|
Max key
|
127
|
|
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find({tel: {$type: 2}}).pretty()
> db.age01.find({tel: {$type: 'string'}}).pretty()
九 限定数量查询
9.1 MongoDB Limit() 方法
>db.COLLECTION_NAME.find().limit(NUMBER)
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find({tel: /^188/}).limit(1).pretty()

9.2 MongoDB Skip() 方法
> db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
> db.age01.find({love: /apple/}).pretty()

> db.age01.find({love: /apple/}).limit(2).skip(1).pretty()

十 MongoDB排序
10.1 MongoDB sort() 方法
> db.COLLECTION_NAME.find().sort({KEY:1})
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find().sort({age: 1}).pretty()

十一 其他查询技巧
11.1 查询说明
[root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin
> use mydb
> db.age01.find({},{name: 1, _id: 0}).limit(2)
说明:
第一个 {} 为 where 条件,为空表示返回集合中所有文档。
第二个 {} 指定那些列显示和不显示 (0表示不显示 1表示显示)。
11.2 范围读取
想要读取从 10 条记录后 100 条记录,相当于 sql 中limit (10,100)。
> db.COLLECTION_NAME.find().skip(10).limit(100)
以上实例在集合中跳过前面 10 条返回 100 条数据。
提示:skip 和 limit 结合就能实现分页。
11.3 skip说明
kip和limit方法只适合小数据量分页,如果是百万级效率就会非常低,因为skip方法是一条条数据数过去的,建议使用where_limit。不要轻易使用Skip来做查询,否则数据量大了就会导致性能急剧下降,这是因为Skip是一条一条的数过来的,多了自然就慢了。
11.4 语法优化
limit(n) 是用来规定显示的条数,而 skip(n) 是用来在符合条件的记录中从第一个记录跳过的条数,这两个函数可以交换使用。
比如:find({},{age:1,_id:0}).limit(2).skip(1),在符合条件的文档中,要显示两条文档,显示的位置从跳过第一条记录开始。这样不是很好理解。
如果写成 find({},{age:1,_id:0}).skip(1).limit(2),在符合条件的文档中,先跳过第一条文档,然后显示两条文档,这样比较好理解。
注意:普通查询skip,和limit三者执行顺序和位置无关,但是在聚合aggregate中使用的时候,具有管道流的特质,执行顺序是按照位置关系顺序执行的。
十二 异常级别
- WriteConcern.NONE:没有异常抛出
- WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
- WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
- WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
- WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
- WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
- WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
参考文档:https://www.runoob.com/mongodb/
004.MongoDB数据库基础使用的更多相关文章
- MongoDB数据库基础操作
前面的话 为了保存网站的用户数据和业务数据,通常需要一个数据库.MongoDB和Node.js特别般配,因为Mongodb是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储 ...
- MongoDB数据库基础
MongoDB简介 MongoDB是一种文档型的非关系型数据库(NoSQL),举例如下: {“foo”:,"greeting":"Hello,world!"} ...
- MongoDB数据库 : 基础
三元素:数据库 集合 文档(json的扩展bson) 服务启动重启停止: sudo service mongodb start(stop,restart) 修改配置文件 /etc/mongodb.co ...
- MongoDB数据库-基础篇
一使用mongodb 1.常用的命令 show dbs 显示数据库列表 use dbname 进入dbname数据库,大小写敏感,没有这个数据库也不要紧 show collections ...
- 01-MongoDB数据库基础
一.MongoDB数据库基础 1.MongoDB数据库介绍 什么是MongoDB? MongoDB是非关系型数据库中的一种,是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情 ...
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各 ...
- 数据库基础 非关系型数据库 MongoDB 和 redis
数据库基础 非关系型数据库 MongoDB 和 redis 1 NoSQL简介 访问量增加,频繁的读写 直接访问(硬盘)物理级别的数据,会很慢 ,关系型数据库的压力会很大 所以,需要内存级的读写操作, ...
- SpringBoot2.0 基础案例(15):配置MongoDB数据库,实现增删改查逻辑
本文源码:GitHub·点这里 || GitEE·点这里 一.NoSQL简介 1.NoSQL 概念 NoSQL( Not Only SQL ),意即"不仅仅是SQL".对不同于传统 ...
- node.js零基础详细教程(6):mongodb数据库操作
第六章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
随机推荐
- 从无到有通过IDEA搭建SpringBoot项目
本人第一次写博客希望记录当下,努力成为IT界中的清流,写的不好多多包涵. SpringBoot是由Pivotal团队在2013年开始研发.2014年4月发布第一个版本的全新开源的轻量级框架.它基于Sp ...
- Android Studio学习-连接真机测试教学
Android Studio 原文链接 https://blog.csdn.net/weixin_44304387/article/details/99213012 真机测试会比AVD(Android ...
- LeetCode 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树
第108题 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10 ...
- C# Replace字符替换函数
它可以将字串内的字符替换为别的字符,可以嵌套使用,如下: 需要注意的是,它可以把字符替换为空,但不可以替换空字符,当不确定字符串是否为空时,可以进行以下判断,再替换: 示例的完整代码: string ...
- 前端面试题套路--终极版(Vue、JavaScript)
前言 面试题是永远都准备不完的!!!!! 前端常见的一些问题 1.前端性能优化手段? 1. 尽可能使用雪碧图 2. 使用字体图标代替图片 3. 对HTML,css,js 文件进行压缩 4. 模块按需加 ...
- JDK新特性关于流操作部分
// array 工具类 可以用来快捷的将数组转化为list List<String> strings = Arrays.asList("zhongguo", &quo ...
- Cesium数据可视化-仓储调度系统可视化部分(附github源码)
Cesium数据可视化-仓储调度系统可视化部分 目的 仓储调度系统需要一个可视化展示物资运输实况的界面,需要配合GPS设备发送的位置信息,实时绘制物资运输情况和仓储仓库.因此,使用Cesium可视化该 ...
- (草稿)如何判断一名UiPath开发人员是否合格?
一名合格的UiPath开发人员究竟需要具备什么核心技能?业务梳理?沟通技巧?VB.net吗?VBA吗?Python?还是SQL?出于多种原因,关于这一点总是众说纷纭,莫衷一是.尽管这些技术都算沾边,但 ...
- chunked
简介 chunked是一种HTTP协议的分块传输编码的机制,即一个HTTP消息可以分成多个部分进行传输,它对于HTTP请求和HTTP响应都适用.对于非持续连接,浏览器通过连接是否关闭来界定请求和响应实 ...
- 004.Windows Server 故障转移群集 (WSFC)简介
一 WSFC 简介 1.1 WSFC 概述 “Windows Server 故障转移群集”(WSFC) 群集是一组独立的服务器,它们共同协作以提高应用程序和服务的可用性.SQL Server 2012 ...