Flask与MongoDB集成实现

一.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)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值