Mongodb数据库
Posted xiongsheng666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb数据库相关的知识,希望对你有一定的参考价值。
Mongodb数据库
非关系型数据库mongodb
mongodb数据库主要用于海量存储,常被用在数据采集项目中
内容
- mongodb的介绍和安装
- mongodb的简单使用
- mongodb的增删改查
- mongodb的聚合操作
- mongodb的索引操作
- mongodb的权限管理
- mongodb和python交互(pymongo模块)
mongodb文档
https://docs.mongodb.com/
1. Mongodb的介绍和安装
1.1 什么是mongodb
- mongodb 是一个功能最丰富的NoSQL非关系数据库。由 C++ 语言编写。
- mongodb 本身提供S端存储数据,即server;也提供C端操作处理(如查询等)数据,即client。
1.2 SQL和NoSQL的主要区别
- 在SQL中层级关系: 数据库>表>数据
- 而在NoSQL中则是: 数据库>集合>文档
1.2.1 数据之间无关联性
- SQL中如何需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表。
- NoSQL则可以把外部数据直接放到原数据集中,以提高查询效率。缺点也比较明显,对关联数据做更新时会比较麻烦。
- SQL中在一个表中的每条数据的字段是固定的。而NoSQL中的一个集合(表)中的每条文档(数据)的key(字段)可以是互不相同的。
1.2.2 SQL 和 NoSQL 的区别
https://blog.csdn.net/weixin_45523107/article/details/123835578?spm=1001.2014.3001.5501
2. Mongodb的简单使用
2.1. mongodb服务端的启动
默认端口:27017
默认配置文件的位置:/etc/mongod.conf
默认日志的位置:/var/log/mongodb/mongod.log
mongodb服务端启动分别两种方式:
1.本地测试方式的启动(只具有本地数据增删改查的功能)
2. 生产环境启动(具有完整的全部功能)
2.1.1 测试方式启动
启动: sudo service mongod start (sudo service mongod start)
停止: sudo service mongod stop
重启: sudo service mongod restart
2.1.2 生产环境正式的启动方式
启动: sudo mongod [–auth --dbpath=dbpath --logpath=logpath --append --fork] [-–f logfile ]
只以 sudo mongod 命令启动时,默认将数据存放在了 /data/db 目录下,需要手动创建
–dbpath: 指定数据库的存放路径
–logpath: 指定日志的存放路径
–append: 或–logappend 设置日志的写入形式为追加模式
–fork: 或-fork 开启新的进程运行mongodb服务
–f: 或-f 配置文件路径(可以将上述配置信息写入文件然后通过该文件中的参数进行加载启动)
–auth: 以权限认证的方式启动,我们会在后边的课程中学习该内容
2.1.3 查看是否启动成功
ps aux | grep mongod
2.2.启动mongodb的客户端:进入mongo shell
启动本地客户端: mongo
查看帮助:mongo –help
退出:exit或者ctrl+c
2.3. mongodb的简单使用
开启mongodb server的情况下,在进入mongo shell后,就可以做简单的使用了
2.3.1 mongodb数据库的命令
查看当前的数据库:db(没有切换数据库的情况下默认使用test数据库)
查看所有的数据库:show dbs /show databases
切换数据库:use db_name
db_name为show dbs后返回的数据库名
删除当前的数据库:db.dropDatabase()
2.3.2 mongodb集合的命令
无需手动创建集合: 向不存在的集合中第一次添加数据时,集合会自动被创建出来
手动创建集合:
db.createCollection(name,options)
db.createCollection("stu")
db.createCollection("sub", capped : true, size : 10 )
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:集合所占用的字节数。 当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时, 会将之前的数据覆盖,单位为字节
查看集合:show collections
删除集合:db.集合名称.drop()
检查集合是否设定上限: db.集合名.isCapped()
2.3.3 简单练习
在mongo shell中输入下列命令,查看结果
show dbs
use test
show collections
db
db.stu.insert('name':'熊胜', 'age':18)
show dbs
show collections
db.stu.find()
db.stu.drop()
show collections
db.dropDatabase()
show dbs
exit
2.3.3 mongodb中常见的数据类型
2.3.3.1 常见类型
Object ID: 文档ID/数据的ID,数据的主键
String: 字符串,最常用,必须是有效的UTF-8
Boolean: 存储一个布尔值,true或false
Integer: 整数可以是32位或64位,这取决于服务器
Double: 浮点数
Arrays: 数组/列表
Object: mongodb中的一条数据/文档,即文档嵌套文档
Null: 存储null值
Timestamp: 时间戳,表示从1970-1-1到现在的总秒数
Date: 存储当前日期或时间的UNIX时间格式
2.3.3.2 注意点
每个文档都有一个属性,为_id,保证每个文档的唯一性,mongodb默认使用_id作为主键
可以手动设置_id的值,如果没有提供,那么MongoDB为每个文档提供了一个独特的_id, 类型为objectID
objectID是一个12字节的十六进制数,每个字节两位,一共是24位的字符串:
前4个字节为当前时间戳
接下来3个字节的机器ID
接下来的2个字节中MongoDB的服务进程id
最后3个字节是简单的增量值
3. Mongodb的增删改查
3.1. mongodb插入数据
命令:db.集合名称.insert(document)
db.stu.insert(name:'gj', gender:1)
db.stu.insert(_id:"20170101", name:'gj', gender:1)
插文档时,如果不指定_id参数,MongoDB会为文档自动分配一个唯一的ObjectId
3.2. mongodb的保存
命令:db.集合名称.save(document)
db.stu.save(_id:'20170101', name:'gj', gender:2)
db.stu.save(name:'gj', gender:2)
db.stu.find()
如果文档的_id已经存在则修改,如果_id不存在则添加
3.3 mongodb的查询
命令:db.集合名称.find()
可以使用以下数据进行练习
db.stu.insert(["name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true ,
"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false ,
"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false ,
"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : true ,
"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : true ,
"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : true ,
"name" : "洪七公", "hometown" : "华筝", "age" : 18, "gender" : true ])
3.3.1 简单查询
方法find(): 查询
db.集合名称.find(条件文档)
方法findOne():查询,只返回第一个
db.集合名称.findOne(条件文档)
方法pretty(): 将结果格式化;不能和findOne()一起使用!
db.集合名称.find(条件文档).pretty()
3.3.2 比较运算符
等于: 默认是等于判断, 没有运算符
小于:
l
t
(
l
e
s
s
t
h
a
n
)
小
于
等
于
:
lt (less than) 小于等于:
lt(lessthan)小于等于:lte (less than equal)
大于:
g
t
(
g
r
e
a
t
e
r
t
h
a
n
)
大
于
等
于
:
gt (greater than) 大于等于:
gt(greaterthan)大于等于:gte
不等于:$ne
查询年龄大于18的所有学生
db.stu.find(age:$gte:18)
3.3.3 逻辑运算符
逻辑运算符主要指与、或逻辑
and:在json中写多个条件即可
查询年龄大于或等于18, 并且性别为true的学生
db.stu.find(age:$gte:18,gender:true)
or:使用$or, 值为数组, 数组中每个元素为json
查询年龄大于18, 或性别为false的学生
db.stu.find($or:[age:$gt:18,gender:false])
查询年龄大于18或性别为男生, 并且姓名是郭靖
db.stu.find($or:[age:$gte:18,gender:true],name:'gj')
3.3.4 范围运算符
使用$in, $nin 判断数据是否在某个数组内
查询年龄为18、 28的学生
db.stu.find(age:$in:[18,28,38])
3.3.5 支持正则表达式
使用$regex编写正则表达式
使用$regex编写正则表达式
3.3.6 自定义查询
mongo shell 是一个js的执行环境 使用$where 写一个函数, 返回满足条件的数据
查询年龄大于30的学生
db.stu.find(
$where:function()
return this.age>30;
)
3.3.7 skip和limit
3.3.8 投影
3.3.9 排序
3.3.10 统计个数
3.4 mongodb的更新
3.5 mongodb的删除
小结:
1. mongo shell中的增 db.集合名.insert(数据) db.集合名.save(包含_id的完整数据) # 根据指定的_id进行保存,存在则更新,不存在则插入
2. mongo shell中的删 db.集合名.remove(条件, justOne: true/false)
3. mongo shell中的改 db.集合名.update(条件, $set:完整数据/部分字段, multi: true/false)
4. mongo shell中的查 db.集合名.find(条件, 字段投影)
4. Mongodb的聚合操作
5. Mongodb的索引操作
6. Mongodb的权限管理
7.Mongodb和Python交互
8.Mongodb总结
以上是关于Mongodb数据库的主要内容,如果未能解决你的问题,请参考以下文章