Pymongo基本使用
from pymongo import MongoClient from django.conf import settings
查询
# 1. 分页
res = collection.find({}, {"_id": 0}).limit(limit).skip(offset)
# 2. 查询, 并限制返回字段
# 前面括号是条件, 后面括号为限制返回字段(0不返回, 1返回)
res = collection.find_one({"user_id": pk}, {"_id": 0})
新增
# 1. 插入
res = collection.find({}, {"_id": 0}).limit(limit).skip(offset)
更新
# 1. 更新, 列表里多个字段, 里的某个值
# 前面括号是搜索条件, 后面括号为修改条件
# $set为方法
# commodity_list.$.count为指定列表里查询条件的那个count值,对他进行修改
res = collection.update_one({"user_id": data.user_id, "commodity_list.id": data.commodity_id},
{"$set": {"commodity_list.$.count": data.count}})
if res.modified_count:
return 200, {"msg": "修改成功"}
else:
return 200, {"msg": "没有修改的值"}
删除
res = collection.delete_one({"user_id": pk})
在mongo中维护id, 提供给pg数据绑定使用
MONGODB_SETTINGS = settings.DATABASES["mongo"]
client = MongoClient(
host=MONGODB_SETTINGS['CLIENT']['host'],
port=MONGODB_SETTINGS['CLIENT']['port'],
username=MONGODB_SETTINGS['CLIENT']['USERNAME'],
password=MONGODB_SETTINGS['CLIENT']['PASSWORD'],
)
db = client[MONGODB_SETTINGS['NAME']]
print(client.server_info()['version'])
eform_collection = db.eform_eform # 替换为实际集合名
# 执行原生MongoDB查询(查询指定id的数据)
result = eform_collection.aggregate([
{'$match': {'id': 11}},
{'$project': {'id': 1, 'eformSchema_id': 1, 'schemaRetrieveDate': 1}}
])
print(list(result))
# 批量查询
result = eform_collection.aggregate([
{'$match': {'id': {'$in': [11, 12, 13]}}},
{'$project': {'id': 1, 'eformSchema_id': 1, 'schemaRetrieveDate': 1}}
])
print(list(result))
# 批量修改
# 批量更新示例1:将所有匹配文档的status字段更新为'completed'
result = eform_collection.update_many(
{'status': 'pending'}, # 查询条件
{'$set': {'status': 'completed'}} # 更新操作
)
# 批量更新示例2:使用$inc操作符递增数值字段
result = eform_collection.update_many(
{'category': 'A'},
{'$inc': {'count': 1}} # 将count字段加1
)
# 实现维护id
# 更新时检查当前seq值
result = eform_collection.update_one(
{'_id': 11, 'auto.seq': 163},
{'$set': {'auto.seq': 164}}
)
if result.modified_count == 0:
# 数据已被其他进程修改
raise Exception('并发冲突:seq值已变更')