MongoDB的基本操作
一、数据库操作
1. 新建数据库
语法
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
实例
以下我们创建了数据库 mongo:
use mongo
db 显示当前数据库
2. 查看所有数据库
查看所有数据库,可以使用 show dbs 命令:
show dbs
注:因为我们新建的test数据库还没写入内容所以并没有显示出来,插入数据 后再此查询就会出现
3. 删除数据库
语法格式如下:
db.dropDatabase()
集合操作
1. 创建集合
插入数据
语法
db.COLLECTION_NAME.insert(document)
在当前集合插入一条或多条数据(或叫文档)
参数说明
- db:表示当前数据库对象。
- createCollection():创建集合方法。
- DOCUMENT表示文档。
- COLLECTION NAME表示集合名称。
- OPTIONS表示集合配置。
- insert():向集合中插入文档的方法。
实例
db.c1.insert({ _id: 1, name: "小明", "专业": "计算机", "学号": "00124" })
可以看到我们在当前mongo数据库下显示创建了c1集合并插入了一条数据:
{ _id: 1, name: “小明”, “专业”: “计算机”, “学号”: “00124”}
2. 查看集合
查询数据
查看已插入文档:
db.c1.find()
可以看到我们已经成功在c1插入数据了
我们也可以将数据定义为一个变量进行插入,如下所示:
首先我们数据定义给了doc变量,然后把doc插入到了c1
语法
remove() 方法的基本语法格式如下所示:
db.collection.remove( <query>, <justOne> )
参数说明:
- query :(可选)删除的集合的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个集合。
实例
我们移除 name为 ‘小明’ 的文档:
db.c1.remove({"name":"小明"})
通过find()查询可以看到已经删除掉了
如果你有同{“name”:“小明”}的多条数据,但你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
db.c1.remove({"name":"小明"},1)
如果想删除所有的数据可以这样:
db.c1.remove({})
3. 删除集合
db.集合名.drop()
修改数据
语法
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 :可选,抛出异常的级别。
实例
准备数据
通过 update() 方法来更新"姓名":
db.c1.update({"姓名":"李欣"},{$set:{"姓名":"张三"}})
update()方法默认是替换整条数据,故此处用修改器 $set 进行修改(添加)列值
(如果字段不存在会添加一个新的键值对)
以上语句只会修改第一条发现{“姓名”:“李欣”}的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
db.c1.update({"姓名":"李欣"},{$set:{"姓名":"张三"}},{multi:true})
升级语法
修改器 | 作用 |
---|---|
$inc | 递增 |
$rename | 重命名列 |
$set | 修改列值 |
$unset | 删除列 |
实例
准备数据:
db.c2.insert([{"姓名":"张三","语文":80,"数学":66,"英语":55},{"姓名":"李四","语文":53,"数学":82,"英语":76,"化学":92}])
递增
给c2的数据集中 {“姓名”:“李四”} 的语文分数增加20分:
db.c2.update({"姓名":"李四"},{$inc:{"语文":20}}) //可填负数
重命名列(字段)
我们把c2里的 姓名 字段改为英文的 name
db.c2.update({"姓名":"李四"}, {$rename:{"姓名":"name"}})
删除列
把{name:“李四”}里的化学删掉了
db.c2.update({name:"李四"},{$unset:{"化学":true}})
二、条件查询
运算符 | 作用 |
---|---|
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | in |
$nin | not in |
实例
在c2中查询数学小于70分的数据
db.c2.find({"数学":{$lt:70}})
配合pretty()可进行易读查询
db.c2.find({"数学":{$lt:70}}).pretty() //数据少不明显
三、聚合操作
表达式 | 描述 |
---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
$min | 最小值 |
$max | 最大值 |
$push | 在结果文档中插入值到一个数组中 |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本 |
$first | 根据资源文档的排序获取第一个文档数据 |
$last | 根据资源文档的排序获取最后一个文档数据 |
语法
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
$group
实例
准备数据c3
db.c3.insert([
{ id:"1",name:"iphone8",price:3000,type:"电子通讯"},{ id:"2",name:"lining",price:500,type:"运动鞋"},
{ id:"3",name:"安踏",price:300,type:"运动鞋"},
{ id:"4",name:"HUAWEI MATE30",price:5000,type:"电子通讯"},{ id:"5",name:"vivo x27",price:4000,type:"电子通讯"}])
- 计算c3中电子通讯和运动鞋的 price 总和
db.c3.aggregate([{$group:{_id:"$type","总价":{$sum:"$price"}}}])
首先对 _id:“$type” 进行
g
r
o
u
p
分组,对
"
group 分组,对 "
group分组,对"price" 进行 $sum 求和方式,求和结果存放在 总价 列
四、Python连接数据库
官网下载Anaconda:https://www.anaconda.com/download/success
在Anaconda Shell里安装 pymongo:
pip install pymongo
确保已经安装pymongo的情况下,在开始菜单里,打开安装Anaconda附带的Jupyter Notebook
连接
在Jupyter里新建Python文件,运行以下每条代码
- 引入pymongo
# 引入pymongo
from pymongo import MongoClient
- 连接MongoDB
# 连接到MongoDB,使用本地端口 localhost
client = MongoClient('localhost')
- 连接数据库
如果该数据库不存在,会自动创建一个mongo数据库
# 连接到 ‘mongo’ 数据库
db = client['mongo']
- 连接数据库里的集合
如果该集合不存在,会自动创建一个 c3 集合
# 连接到 c3 集合
collection = db['c3']
- 查询集合里面的内容
# 查询 集合 所有内容
for doc in collection.find():
print(doc)
验证
- 我们尝试在Jupyter里新建一个数据库并往里面一条数据存放到c4集合里:
最后验证连接成功