PyMongo基本操作笔记

MongoDB是目前最流行的NoSQL数据库之一,使用的数据类型为BSON(类似JSON)。Python要连接MongoDB需要驱动,推荐使用PyMongo。PyMongo是一个用于MongoDB的Python工具,也是一个被推荐的Python操作MongoDB数据库的方式。

安装PyMongo

pip install pymongo

基本连接操作

# 引入pymongo
import pymongo

# 使用MongoClient创建连接,并且指定连接的URL地址。
client = pymongo.MongoClient('mongodb://localhost:27017')

# 使用账号密码验证。
client = pymongo.MongoClient('mongodb://username:password@localhost:27017')

# 访问数据库对象
db = client['database']

# 访问集合对象
col = db['collection']

基本数据操作

插入数据

使用insert_one()方法和insert_many()方法来向MongoDB的集合中插入文档。如果所插入的集合在MongoDB中不存在,MongoDB将为你自动创建一个集合。

# 插入一个文档
data = {...}
db["dbname"].insert_one(data)

# 也可以使用
db["dbname"].update({"field": "value"}, dict(data), True)

# 插入多个文档
data = [{...},{...},{...}]
db["dbname"].insert_many(data)

查询数据

通过find()方法产生一个查询来从MongoDB的集合中查询到数据。MongoDB中所有的查询条件在一个集合中都有一个范围。

基本查询

# 查询一条数据
db["dbname"].find_one({"field": "value"})

# 获取所有的文档
db["dbname"].find()

# 相等条件查询
db["dbname"].find({"field": "value"})

# 嵌入式文档中查询
db["dbname"].find({"field.field1": "value"})

指定字段

查询指定字段的数据,将要返回的字段对应值设置为1。如果设置了一个字段为0,则其他的都为1,反之亦然。

mddb["dbname"].find_one({},{"field1": 1, "field2": 1})

条件操作符

比较操作符"$lt"、"$lte"、"$gt"、"$gte"、"$ne"对应于”<“、”<=”、”>”、”>=”、”!=”。

# $gt 大于
db["dbname"].find({"field": {"$gt": 10}})

# $lt 小于
db["dbname"].find({"field": {"$lt": 10}})

# $ne 不等于
db["dbname"].find({"field": {"$ne": 10}})

# $in 属于
db["dbname"].find({"field": {"$in": ["value1","value2"]}}

# $nin 不属于
db["dbname"].find({"field": {"$nin": ["value1","value2"]}})

# $or 或
dbdb["dbname"].find({"$or": [{"field1": "value1"}, {"field2": "value2"}]})

正则表达式

db["dbname"].find({"field":{"$regex": "关键词"}}}

# 不区分大小写
db["dbname"].find({"field":{"$regex": "Key"}, "$options": 'i'}}

排序sort()

升序:pymongo.ASCENDING或1,降序:pymongo.DESCENDING或-1,不指定默认升序。

# 升序排序
dbdb["dbname"].find().sort("key", pymongo.ASCENDING)

# 多条件排序
db["dbname"].find().sort([("key1", 1), ("key2", -1)])

Limit与Skip

# 查询指定数量的数据
ddb["dbname"].find().limit(5)

# 跳过指定数量的数据
db["dbname"].find().skip(5)

# 组合使用
db["dbname"].find().skip(5).limit(5)
skip(), limilt(), sort()三个组合使用时,执行顺序是先sort(), 然后是skip(),最后是显示的limit()。

统计结果数量

count = db["dbname"].find({"field": "value"}).count()

# 官方最新方法
count = db["dbname"].count_documents({"field": "value"})

更新数据

更新特定字段

使用update_one()update_many方法更新集合中的文档。update_one()方法一次更新一个文档。使用update_many()方法可以更新所有符合条件的文档。

# 更新一条数据
db["dbname"].update_one({"field": "value"},{"$set": {"key1": "value1"}})

# 更新嵌入式文档字段
db["dbname"].update_one({"field": "value"},{"$set": {"key1.key2": "value1"}})

# 也可以使用
db["dbname"].update({"field": "value"},{"$set": {"key1.key2": "value1"}})

替换一个文档

data = {...}
db["dbname"].replace_one({"field": "value"},data})

# 也可以使用
ddb["dbname"].update({"field": "value"}, dict(data), True)

删除数据

使用delete_one()以及delete_many()方法从集合中删除文档。方法需要一个条件来确定需要删除的文档。

# 删除一条
db["dbname"].delete_one({"field": "value"})

# 删除所有
db["dbname"].delete_many({"field": "value"})

# 删除一个集合
db["dbname"].drop()

PyMongo索引

索引可以对查询的高效执行起到支持,MongoDB会在创建文档的时候自动为_id字段创建索引。

# 创建索引
db["dbname"].create_index([("field", 1)])

# 创建复合索引
db["dbname"].create_index([("field1", pymongo.ASCENDING),("field2", pymongo.DESCENDING)])

# 删除索引
db["dbname"].drop_index([("field", 1)])

# 查看索引信息
ddb["dbname"].index_information()

以上只是PyMongo的一些常用操作,完整内容请查看MongoDB官方英文文档

暂无评论

发送评论 编辑评论


				
上一篇
下一篇