一.MongoDB的导入
1.pip安装
pip install pymongo
2.配置MongoDB链接
这里要注意,一般来说我们本地的MongoDB链接是默认没有账号密码的,但是手动添加密码的需要将账号密码也进行注明
client = MongoClient("mongodb://localhost:27017/") # 根据实际MongoDB地址和端口配置
db = client["legaldb"] # 替换为你的数据库名称
collection = db["legaldb"] # 替换为你的集合名称
二.MongoDB的使用
1.简单插入
其实插入相关的代码只有collection.insert_one({'messages': messages}),MongoDB对于插入删除这种简单操作的代码及其简单,这部分代码还实现了向前端返回数据的处理结果(数据是否正确插入)
@app.route('/save', methods=['POST'])
def saveHistories():
try:
global messages # 引用全局变量 messages
if messages: # 如果 messages 列表非空
print(messages)
# 存储整个 messages 列表到 MongoDB
result = collection.insert_one({'messages': messages})
messages = [] # 清空 messages 列表
print(messages)
return jsonify({'inserted_id': str(result.inserted_id)}), 201
else:
return jsonify({'message': 'No messages to save'}), 200
except Exception as e:
return jsonify({'error': str(e)}), 500
2.管道聚合
管道聚合是MongoDB的一个难点,不如mysql的操作那么简单,对于管道我们要知道每个标识符的含义,而且要明确分层,而且MongoDB可以存储比MySQL更为复杂的数据,对于数据处理要求低的情况下使用体验更佳。
@app.route('/histories', methods=['GET'])
def getHistories():
# 执行聚合查询
pipeline = [
{
'$project': {
'_id': 0, # 排除默认的 _id 字段
'messages': '$messages' # 保留 messages 字段
}
},
{
'$addFields': {
'messages': {
'$map': {
'input': '$messages',
'as': 'msg',
'in': {
'content': '$$msg.content', # 提取每个 message 的 content 字段
'type': '$$msg.type' # 提取每个 message 的 type 字段
}
}
}
}
}
]
cursor = collection.aggregate(pipeline)
# 处理结果
result = []
for doc in cursor:
result.append(doc['messages'])
# 返回 JSON 响应
return jsonify(result)