数据在MongoDB中是按照"库(Database)"——"集合(collections)"——"文档(Document)"的层级关系来存储的。如果使用Python的数据结构来做类比的话:文档相当于一个字典;集合相当于一个包含了很多字典的列表;库相当于一个大字典,大字典里面的每一个键值对都对应了一个集合,Key为集合的名字,Value就是一个集合。
I. 初始化连接对象
II. 指定(建立)数据库
III. 指定(建立)集合
IV. 插入数据
V. 查询
VI. 计数
VII. 排序
VIII. 去重
IX. 偏移、限制元素个数
X. 更新
XI. 删除
I. 初始化连接对象
import pymongo
client1 = pymongo.MongoClient(host='localhost',port=27017)
#调用pymongo的MongoClient()方法初始化一个MongoClient连接对象
client2 = pymongo.MongoClient()
# 如果MongoDB是运行在本机计算机上的, 而且没有修改端口或添加用户名及密码,
# 初始化的时候就不需要添加参数
client3 = pymongo.MongoClient('mongodb://localhost:27017')
# 如果MongoDB是运行在其他服务器上面的,就需要使用MongoDB URL:
# mongodb://用户名:密码@服务器IP或域名:端口
# 如果没有权限验证, 写作 "mongodb://服务器IP或域名:端口" 这样的形式即可
print(type(client2)) #
II. 指定(建立)数据库
#方法1
db1 = client.test # 'test'即为数据库的名称
#方法2
db2 = client['test'] # 'test'即为数据库的名称
# 方括号中除了填写字符串外, 还可以写保存了字符串的变量名
III. 指定(建立)集合
MongoDB的每个数据库又包含许多集合(collection),类似于关系型数据库中的表
#方法1
collection1 = db.students # 'students'即为集合的名称
#方法2
clllection2 = db['students'] # 'students'即为集合的名称
# 方括号中除了填写字符串外, 还可以写保存了字符串的变量名
IV. 插入数据
insert_one() 插入单条记录
insert_many() 插入多条记录
在MongoDB中,每条数据都有一个_id属性来唯一标识,如果没有显式指明,MongoDB会自动产生一个ObjectId类型的_id属性值,它是在数据被插入到MongoDB的瞬间,通过一定的算法计算出来的。因此,_id这一列就代表了数据插入的时间,它不重复,而且始终递增。通过一定的算法,可以把ObjectId反向恢复为时间。
insert_one()方法返回一个InsertOneResult对象,对其调用inserted_id属性即可获得_id属性的属性值;insert_many()方法返回一个InsertManyResult对象,对其调用inserted_ids属性即可获得插入数据的_id列表
V. 查询
find_one()
find()
find()方法中不填'filter'参数表示获取所有document
查询20
比较符号大全:
功能符号大全:
VI. 计数
统计(符合条件的)查询结果有多少条数据,用count_documents()方法
VII. 排序
sort()方法可以对查询到的结果进行排序,常和find()方法搭配在一起使用
sort(要排序的字段,pymongo.ASCENDING/pymongo.DESCENDING)默认为升序
pymongo.DESCENDING也可以用-1替代:
VIII. 去重
返回的结果是一个列表
如果我们想在插入数据时就进行去重,除了在使用update_one()和update_many()方法时据时指定upsert=True,还可以在一开始为集合创建一个索引,并指定unique=True
当id重复时,insert_many()语句会报错,所以最好把这部分代码放到try except语句中:
IX. 偏移、限制元素个数
skip()
skip()方法,忽略前X个元素,取得第X+1及之后的元素调用skip()后返回的依旧是cursor对象
limit()
limit()方法,指定要取的结果数量
两者也可以组合使用:
X. 更新update_one()方法
update_many()方法
update_one()方法和update_many()方法的API一致,前者只更新一条信息,后者更新所有符合要求的信息。API中我们主要用到 'filter 和 'update', 'filter'用来过滤我们想要更新的document, ‘update'是具体的更新操作
更新条件为{'inc':{'age':1}},也就是年龄加1
除 'filter 和 'update'外,最常用的参数是'upsert',其实看到名字,我们就大概可以猜到它的意思:在不满足筛选条件的时候进行插入,在满足筛选条件时进行更新. 这其实是另一种形式的去重
XI. 删除delete_one()方法,删除第一条符合条件的数据,可以调用deleted_count属性获得删除的数据条数
delete_many()方法,删除所有符合条件的数据,可以调用deleted_count属性获得删除的数据条数
MongoDB官方文档在此:Query and Projection Operatorsdocs.mongodb.com