目录
MongoDB介绍
安装与配置
Navicat连接
MongoDB操作
python连接MongoDB
NoSQL:全称Not only SQL,意为不仅仅是SQL,泛指非关系型数据库。
MongoDB是一个基于分布式文件存储的非关系数据库,由C++语言编写。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
-
面向集合存储,易存储对象类型的数据。
-
模式自由。
-
支持动态查询。
-
支持完全索引,包含内部对象。
-
支持查询。
-
支持复制和故障恢复。
-
使用高效的二进制数据存储,包括大型对象(如视频等)。
-
自动处理碎片,以支持云计算层次的扩展性。
-
支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
-
文件存储格式为BSON(一种JSON的扩展)。
-
可通过网络访问
1.在MongoDB官网下载
2.安装
安装过程中选择Custom可自定义MongoDB的安装目录
可选择是否勾选Install MongoDB Compass来选择是否安装图形化工具Compass
3.配置
配置环境变量,这里说明一下配置环境变量的意义,配置环境变量是为了随时随地能启动该目录下的.exe文件
第一步右键打开属性,也可直接打开设置
第二步搜索高级系统设置,
第三步点击环境变量
第四步在系统变量下方找到Path并双击
第五步新建并将MongoDB安装目录下的bin目录地址放入
4.配置成功
打开cmd并输入mongod,出现如下界面则说明配置成功:
-
注意MongoDB6.0版本之后,MongoDB将不再默认安装shell工具,此时当用户打开终端输入mongo命令后将报如下错误:
此时我们需要在MongoDB官网下载[MongoDB shell压缩包](MongoDB Shell Download | MongoDB)并将解压后的.exe两个文件放入MongoDB安装目录下的bin目录下面:
下一步在cmd中mongosh,出现如下界面则说明服务启动成功:
若想关闭服务,在此页面连续按下两次Ctrl+c
填入连接名,点击测试连接:
#清屏
cls
#查看命令帮助
help
#断开连接
exit
增:
- MongoDB中默认的数据库为test
#创建数据库,数据库存在时转换至该数据库
use 库名
#创建集合
db.createCollection('users')
#创建集合同时插入数据
db.users.insert({name:"樊狗",age:30,level:4,email:"678@qq.com"})
db.users.insertOne({name:"蔚徐坤",age:50,level:1,email:"123@qq.com"})
db.users.insertMany([{name:"赖某",age:22,level:10,email:"2260@qq.com"},{name:"高先森",age:37,level:3,email:"3456@qq.com"},{name:"李少",age:27,level:5,email:"777@qq.com"},{name:"马保国",age:37,level:10,email:"349@qq.com"}])
删:
#删除数据库(先切换至需要删除的数据库)
db.dropDatabase()
#删除当前数据库中指定的集合
db.集合名.drop()
#删除集合中某条数据
db.users.deleteOne({age:22})
#删除集合中的所有数据,db.users.remove({},{justOne:true/false}),true时只删除一条,默认为false
db.users.deleteMany({name:"张三"})
db.users.remove({name:"张三"})
#删除一条数据并返回显示被删除的数据
db.users.findOneAndDelete({name:"张三"})
改:
#update({query},{update},{multi:boolean}),query为查询条件
db.users.update({name:"高先森"},{$set:{age:38}})
db.users.updateOne({name:"高先森"},{$set:{age:37}})
db.users.updateOne({name:"高先森"},{$set:{age:37}},{multi:true})
db.users.updateMany({name:"高先森"},{$set:{age:38}})
db.users.updateOne({name:"高先森"},{$inc:{age:5}})
查:
- 刚刚创建的数据库使用show dbs不会显示,需要向数据库插入数据才会显示
- 当skip(),sort(),limit()三个函数放在同一语句中时,执行顺序先后:sort(),skip(),limit()
#查看当前版本
db.version()
#查询所有数据库
show dbs
#查询当前数据库中的所有集合
show collections
#查询集合中的所有数据
db.users.find()
#查询符合条件的所有结果
db.users.find({age:50})
#查询符合条件的第一条结果
db.users.findOne({age:37})
#limit()限制返回结果的数量
db.user.find().limit(1)
#skip()跳过查询结果,此处跳过前两条结果
db.users.find().skip(2)
#sort()排序查询结果
db.user.find().sort({level:1})
db.user.find().sort({level:-1})
db.user.find().sort({level:1}).limit(2)
db.user.find().sort({level:-1,name:1})
#只查询某价值对结果信息
db.users.find({},{name:1})
#查询除某键值对的所有信息
db.users.find({},name:0})
#比较运算符(单引号可有可无)
db.users.find({age:22})
db.users.find({age:{'$eq':22}})
db.users.find({age:{'$gt':22}})
db.users.find({age:{'$lt':30}})
db.users.find({age:{'$lte':22}})
db.users.find({age:{'$gte':22}})
db.users.find({age:{'$ne':22}})
#逻辑运算符(单引号可有可无)
db.users.find({level:10,name:"马保国"})
db.users.find({level:{$exists:true}})
#范围运算符
db.users.find({age:{$in:[22,37]}})
db.users.find({age:{$nin:[22,37]}})
#模糊查询
db.users.find({name:/赖/})
db.users.find({name:/^某/})
db.users.find({name:{$regex:'^赖'}})
db.users.find({name:/某$/})
#统计数量
db.users.find().count()
db.users.count({age:22})
python连接MongoDB
1.准备工作
- 安装好MongoDB并启动了其服务
- 安装好Pymongo库
2.连接MongoDB
import pymongo
#连接数据库,创建连接对象client
client = pymongo.MongoClient(host='localhost',port='27017')
#指定数据库,数据库不存在时将创建
db = client.test
db = client['528']
#指定集合对象,该集合不存在时将创建
users = db['users']
#插入数据
student = {
'name' : '张三',
'age' : 25,
'level' : 4
}
users.insert_one(student)
student1 = {
'name' : 'nb',
'age' : 37,
'level' : 7
}
student2 = {
'name' : 'wd',
'age' : 79,
'level' : 5
}
users.insert_many([student1,student2])
#查询,find()返回结果为Cursor类型,相当于一个生成器
all1 = users.find()
for i in all:
print(i)
all2 = users.find({'level':10})
one = users.find_one()
two = users.find_one({'age':22})
three = users.find_one({'age':{'$gte':20}})
#计数统计
count = users.find().count()
#排序
result = users.find().sort('age',pymongo.ASCENDING)
result = users.find().sort('age',pymongo.DESCENDING)
#偏移
result = users.find().skip(2)
#更新
conditon = {'name':'ljf'}
user = users.find_one(condition)
user['name'] = 'll'
users.update_one(conditon,{'$set':user})
#删除
user.delete_one({'name':'ll'})
user.delete_many({'age':22})