导入库,建立连接
a. from pymongo import MongoClient
b. client = MongoClient(host,port)
创建数据库 myDB (应该叫连接数据库,比较创建数据库更合适)
a. db = client['myDB'] 或者
b. db = client.myDB
c. 两者是一个意思,凭喜好选择。注意,第一个【】里面是字符串
d. 如果数据库myDB不存在,则重新创建一个,如果存在,则连接已存在的myDB数据库
建立集合myColletions(相当于sql中的表单)
a. myColl = db['myColletions'] 或者
b. myColl = db.myColletions
c. 两者是一个意思,凭喜好选择。注意,第一个【】里面是字符串
d. 如果集合myColletions不存在,则重新创建一个,如果存在,则连接已存在的myColletions集合
插入文档记录(也就是sql中表单的行记录)
a. 如果插入的集合不存在,则mongoDB自动给你创建一个。
b. myColl.insert_one(BinaryJson) 插入单条数据
i. BinaryJson 可以简单理解为 二进制版的json,
mongoDB自动将json转换我BinaryJson,如无特殊需要插入json即可
ii. 插入一条Json格式的文档,也就是表单行记录
iii. 如果插入的json格式文档中不包括 '_id'字段,则mongoDB,自动创建一个‘_id‘字段,
并生成一个ObjectId,作为_id字段值。
iv. 返回一个 insertOneResult对象,它包括inserted_id属性,
返回一个被插入对象的_id字段值。:
1) result = myColl.insert_one(json)
2) coll_id = result.inserted_id
c. myColl.inssert_many(jsonColletions)插入多条数据
i. 插入一个json文档集合,一般情况下是 列表,列表的每一个元素,必须是一个json格式数据对象
ii. 如果插入的json格式文档中不包括 '_id'字段,则mongoDB,自动创建一个‘_id‘字段,
并生成一个ObjectId,作为_id字段值
iii. 返回一个insertManyResult对象,它包括inserted_ids属性,
返回被插入对象的_id字段值的列表
查询文档记录(sql中的表单查询)
a. 查询所有数据
i. myColl.find() 查询集合中的所有文档记录(表中的行记录)
1) 返回一个查询结果的游标,可迭代对象,就像open(fileName)函数一样
a) result = myColl.find() f = open(fileName)
b) for value in result: for value in f:
c) print value print f
d) 输出每一条文档记录(行记录) 输出每一行内容
2) 相当于 sql中的:
a) select * from myColl
b. 查询限定操作(也就是sql中的 where 语句)
i. myColl.find({'name':'liming'}) 查询集合中 字段 name = liming的记录
1) 注意:括号内部是一个 字典,或者 json格式的数据(其实都一个卵样)
2) 字典 key = 集合内文档的字段,value = 字段的值
3) 相当于sql中:
select *
from myColl
where name = 'liming'
ii. 一些高级操作:
1) 比较操作:
a) 小于比较:
i) myColl.find({'age':{'$lt':30}}
ii) 查询age字段值 小于30的所有文档记录
iii) 注意:括号内是一个 字典
iv) 字典 key = 文档字段,value 是一个字典,其中 key = 比较操作符, value =比较值
v) 相当于sql中:
select *
from myColl
where age < 30
b) 其他比较操作符
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
2) 组合查询:
a) 逻辑与 and
i) myColl.find({'name':'liming','age':30})
ii) 查询 name = liming 和 age = 30 的所有文档记录
iii) 注意:括号内是一个字典,两个元素。用 逗号分隔开,key = 字段,value=字段值
iv) 相当于sql:
select *
from myColl
where name = 'liming' and age = 30
b) 逻辑或 or
i) myColl.find({'$or':[{'name':'liming'},{'age':30}]})
ii) 查询name = 'liming' 或 age = 30的所有文档记录
iii) 注意:括号内是一个字典,key = '$or' 逻辑或操作符,value = 一个列表
列表内是两个字典,key = 字段,value=字段值
iv) 相当于sql:
select *
from myColl
where name = 'liming' or age = 30
3) 对查询结果进行排序:
a) myColl.find().sort('name',pymongo.DESCENDING)
i) 对查询结果按照字段 name进行排序,默认为升序,可以指定排序方向,
DESCENDING是降序
ii) 相当于sql:
select *
from myColl
order by name DESC
b) myColl.find().sort([{'name':pymongo.DESEDING',{'age':pymongo.DESEDING'}])
i) 对查询结果排序,指定排序方向为 降序,默认为升序。
先按照name字段排序,在按照age字段排序
ii) 相当于sql:
select *
from myColl
order by name DESC ,age DESC
DESC关键字只适用于 DESC前面的字段,需要的话,可以对每个字段指定一次 DESC
更新数据:
a. 更新指定字段
i. myColl.update_one() 更新一条文档,只更新找到的第一条记录
1) 包含三个参数:
a) 过滤器(筛选器),筛选出符合条件的文档
b) 更新操作
c) 一些相关的更新参数设置
2) myColl.update_one({'age':30},{'$set':{'name':'zhangsan'}},upsert=True)
a) 更新查询出来的符合 age = 30的第一条文档记录,
b) 使用$set操作符 更新字段name 为 ’zhangsan‘
c) upsert = True 表示如果需要更新的字段不存在,
则mongoDB自动创建该包含该字段的文档,并更新该字段
i) 默认为False,表示文档不存在时,不创建新的文档
d) 注意:第二个参数是一个字典
key = $set 更新操作符 value = 需要更新的字段,以及需要更新的值。。
3) 相当于:
update myColl
set name = 'zhangsan'
where age = 30
ii. myColl.update_many() 批量更新一组文档,更新找到的所有记录
1) 使用方法与update_one()一样
2) update_many()更新找到的所有记录,update_one()只更新找到的第一条记录。
清空集合内容(sql中清空表单内容)
a. myColl.delete_one() 删除指定字段文档记录
i. 删除一条记录,值删除找到的第一条记录
ii. myColl.delete_one({'age':30})
1) 删除age = 30 的所找到的第一条记录
iii. 相当于:
delete from myColl
where age = 30
b. myColl.delete_many()
i. 删除找到的所有记录
ii. 使用方法与 delete_one()一样
1) 只是,delete_one()只删除找到的第一条文档记录
2) delete_many()删除找到的所有文档记录
c. myColl.delete_many({})
i. 一次性清空整个集合的所有文档记录
ii. 相当于:
delete from myColl
删除集合(sql中删除表单)
a. myColl.drop()
删除一个集合,彻底的删除,而不是清空
b. 相当于:
i. drop table myColl
数据聚合:
a. 数据的分组,以及统计:
i. 根据一个字段分组文件,并计算总数:
1) myColl.aggregate( [ {'$group' : {'_id' : '$age' , 'count':{'$sum':1} } } ]
对字段age的记录进行分组,并计算age字段相同值的总和
2) 括号里面是个列表
a) 元素是一个字典,key = '$group' 分组操作符
b) value = 一个字典,两个元素。
i) 第一个元素
One. key = '_id' ,这个是固定不变,mongoDB按照id来查找文档
Two. value = '$age' 需要分组的字段,必须以
ii) 第二个元素
One. key = 'count' 设立一个字段别名,来显示统计值
Two. value = '$age' 需要分组的字段,必须以 $ 开头
Three. value =一个字典:
First. key = '$sum' 聚合操作符:计算总和操作
Second. value = 1 表示计算查询到的所有值
3) 相当于:
select age as _id,count(*) as count
from myColl
group by age
ii. 筛选并分组文档:
1) myColl.aggregate([{[{'$match':{'name':'lisi','age':30}},{'$group':{'_id':'$age','count':{'$sum':1}}}])
a) 查询name = 'lisi' and age = 30的文档记录
b) 并对 age字段进行分组,并计算age字段相同值的总和
c) $match 筛选操作符 值为需要筛选的内容
2) 相当于:
select age as _id,count(*) as count
from myColl
group by age
having name = 'list' and age = 30
b. 其聚合操作符:
image.png