MongoDB 教程

mongodb-logo

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB简介

什么是MongoDB?

  • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

crud-annotated-document

window安装MongoDB

MongoDB安装包括两部分,一个是将MongoDB的服务下载下来并且安装到自己电脑;

一个是可视化界面解释:你下了MongoDB服务当然要用起来啊,固然你可以使用命令行的客户端,但是建议你安装MongoDB Compass可视化界面,用起来很方便

进入页面 https://www.mongodb.com/download-center/community ,我安装这个版本

下载选项

下载好后的文件:

img

双击开始安装(以下几步注意,其他全部next):

安装

这里我选择的是自定义安装,选择你想安装到的位置

文件位置

点击ok,然后点击next 点击之后 新版的Mongodb会主动在安装目录下创建log和data文件,这相比较早期版本有了改善 ,早期需要自己手动创建 但我们仍然需要在data下创建db文件夹 笔者的在C:\MongoDB\data\db(记住一定要再建个db文件夹)

创建

重重之重(下图一定要取消安装,compass客户端可视化界面我会另外下载。你要是选中了,那就是安装了一天也完成不了)

取消

最后安装成功会弹出一个警告框,选中 Ignore 就好

确认

配置环境变量

环境变量

至此,MongoDB客户端已经安装完毕

由于我们已经创建了C:\MongoDB\data\db文件夹 这里就不需要再创建 否者还要创建 然后在cmd进入C:\MongoDB\bin目录下(在windows资源管理器中shift+右键打开powershell也行)然后执行mongod -dbpath C:\MongoDB\data\db 命令 如下图(这条命令是开启服务,它会一直运行,只要你要使用Mongodb,这个窗口就不能关)

执行

已经启动了MongoDB服务

但是我们需要Mongo.exe这个文件连接到MongoDB数据库,

可是有的版本安装目录bin下并没有mongo.exe这个文件,需要我们手动下载

下载shell

下载文件是一个压缩包,打开进入bin,把bin目录下的文件解压到本地bin下

解压

执行mongo.exe,回车

点击

自带三个数据库

python连接MongoDB

下载python中MongoDB的驱动程序

pip install pymongo

python操作mongodb

1.连接mongodb

无需权限认证方式

1
2
3
4
5
6
7
8
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017")
# myclient = pymongo.MongoClient('localhost',27017)
# host = 自己的ip
# myclient = pymongo.MongoClient(host,27017)
print(myclient.list_database_names())
输出:
['admin', 'config', 'local', 'test']

权限认证方式

1
2
3
4
import pymongo
myclient = pymongo.MongoClient('localhost', 27017)
db = mongo_client.admin
db.authenticate('用户名', '密码')

2.指定数据库和集合

1
2
3
4
5
6
获取数据库
方法一:db = client.test
方法二:db = client['test']
指定集合
方法一:collection = db.stu
方法二:collection = db['stu']

3.插入数据

可以使用insert方法插入数据,但在pymongo中,官方推荐使用 insert_one 完成单个数据的写入,insert_many 完成多条数据的插入。

1
2
3
4
5
6
7
#增加一条
stu1={'id':'001','name':'zhangsan','age':10}
result = collection.insert_one(stu1)
#增加多条
stu2={'id':'002','name':'lisi','age':15}
stu3={'id':'003','name':'wangwu','age':20}
result = collection.insert_many([stu2,stu3])

4.删除数据

1
2
3
4
5
6
#可以直接使用remove方法删除指定的数据
result = collection.remove({'name': 'zhangsan'})
#使用delete_one()删除一条数据
result = collection.delete_one({"name":"zhangsan"})
#delete_many()删除多条数据
result = collection.delete_many({"age":{'$lt':20}})

5.修改数据

可以使用update方法修改数据,但在pymongo中,官方推荐使用 update_one 完成单个数据的修改,update_many 完成多条数据的修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#update_one,第 2 个参数需要使用$类型操作符作为字典的键名
#姓名为zhangsan的记录,age修改为22
condition = {'name': 'zhangsan'}
res = collection.find_one(condition)
res['age'] = 22
result = collection.update_one(condition, {'$set': res})
print(result) #返回结果是UpdateResult类型
print(result.matched_count,result.modified_count) #获得匹配的数据条数1、影响的数据条数1

#update_many,所有年龄为15的name修改为xixi
condition = {'age': 15}
res = collection.find_one(condition)
res['age'] = 30
result = collection.update_many(condition, {'$set':{'name':'xixi'}})
print(result) #返回结果是UpdateResult类型
print(result.matched_count,result.modified_count) #获得匹配的数据条数3、影响的数据条数3

6.查询数据

find()查找全部数据

返回所有满足条件的结果,如果条件为空,则返回全部结果,返回结果是一个Cursor游标可迭代对象。

1
2
3
4
5
6
7
8
rets = collection.find({"age":20}),
for ret in rets:
print(ret)
# 查询结果有多少条数据
count = collection.find().count()
# 查询结果按年龄升序排序
results = collection.find().sort('age', pymongo.ASCENDING)
print([result['age'] for result in results])

1.游标是什么?

用来存储多条查询数据的一种数据结构(’结果集’), 它有一个 ‘指针’,从上往下移动(’fetch’),从而能够 ‘遍历每条记录’

2.优缺点

(1) 提高 sql ‘执行效率’

(2) 牺牲 ‘内存’

find_one()查找一条数据

接收一个字典形式的条件,返回字典形式的整条数据,如果条件为空,则返回第一条。

1
ret =collection.find_one({'name': 'zhangsan'})