Python操作MongoDB的常用方法

本文介绍了使用Python的pymongo库连接和操作MongoDB数据库的基本步骤,包括连接数据库、创建集合、插入单个和多个文档、查询数据、更新记录以及删除数据的方法。示例代码详细展示了各种操作过程。
摘要由CSDN通过智能技术生成

第一章 常规操作

连接数据库

import pymongo
client = pymongo.MongoClient(host="", port=, username="", password="", authSource='')

查询所有数据库

dblist = client.database_names()

连接test数据库

db = client.test

查询该数据库中的所有集合(表)

col_list = db.collection_names()

创建 NanChang 集合

col = db["NanChang"]

连接集合

col = db.NanChang

第二章 增加数据

插入集合

mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
col.insert_one(mydict) 

插入多个文档

mylist = [
  { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
  { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
  { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
  { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
  { "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
col.insert_many(mylist)

返回插入的id值

col.insert_one(mydict).inserted_id
col.insert_many(mylist).inserted_ids

在插入文档时没有指定 _id,MongoDB 会为每个文档添加一个唯一的 id。
插入json文件数据时,要转为python对象


第三章 查询数据

查询该集合的第一条数据

col.find_one()

查询该集合中所有的数据

col.find()

可以for循环迭代

查询指定字段的数据

for x in col.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
  print(x)

输出:
{'name': 'RUNOOB', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}

注意:除了 _id,不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。

for x in col.find({},{ "alexa": 0 }):
  print(x)

输出:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}

除了 alexa 字段外,其他都返回

for x in col.find({},{ "name": 1, "alexa": 0 }):
  print(x)

输出:
pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.

同时指定了 0 和 1 则会报错

根据指定条件查询

myquery = { "name": "RUNOOB" }
col.find(myquery)

高级查询

myquery = { "name": { "$gt": "H" } }
col.find(myquery)

读取 name 字段中第一个字母 ASCII 值大于 “H” 的数据,大于的修饰符条件为 {“$gt”: “H”}

使用正则表达式

myquery = { "name": { "$regex": "^R" } }
col.find(myquery)

返回指定条数记录

for i in mycol.find().limit(3):
	print(i)

返回 3 条文档记录(数据)


第四章 修改数据

修改匹配的第一条记录

myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
col.update_one(myquery, newvalues)

将 alexa 字段的值 10000 改为 12345
update_one() 方法只能修匹配到的第一条记录

修改所有匹配的记录

myquery = { "name": { "$regex": "^F" } }
newvalues = { "$set": { "alexa": "123" } }
col.update_many(myquery, newvalues)

第五章 数据排序

按照 alexa 字段进行升序

col.find().sort("alexa")

降序

col.find().sort("alexa", -1)

第六章 删除数据

删除匹配的第一个文档(数据)

myquery = { "name": "Taobao" }
col.delete_one(myquery)

删除匹配的多个文档

myquery = { "name": {"$regex": "^F"} }
x = col.delete_many(myquery)
print(x.deleted_count, "个文档已删除")

{} 删除集合中的所有文档

col.delete_many({})

删除集合

col.drop()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值