MST

星途 面试题库

面试题:MongoDB事务中如何进行批量更新操作

在MongoDB事务环境下,假设存在一个集合'students',包含学生信息,结构为{name: 'string', age: 'number', score: 'number'}。现在需要将所有年龄大于18岁的学生的分数都增加10分,使用事务实现这个批量更新操作,写出对应的代码。
25.1万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
const { MongoClient } = require('mongodb');

// 连接字符串
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function updateStudentScores() {
    try {
        await client.connect();
        const session = client.startSession();
        session.startTransaction();

        const db = client.db('yourDatabaseName');
        const studentsCollection = db.collection('students');

        await studentsCollection.updateMany(
            { age: { $gt: 18 } },
            { $inc: { score: 10 } },
            { session }
        );

        await session.commitTransaction();
        console.log('分数更新成功');
    } catch (error) {
        console.error('事务处理失败', error);
    } finally {
        await client.close();
    }
}

updateStudentScores();

上述代码使用Node.js的MongoDB驱动,通过事务来批量更新年龄大于18岁的学生分数。具体步骤如下:

  1. 连接数据库:使用MongoClient连接到本地MongoDB服务器。
  2. 开启事务:调用startSession开启会话,并在会话上调用startTransaction开启事务。
  3. 执行更新操作:使用updateMany方法,更新符合条件(年龄大于18岁)的文档,将其score字段增加10分,并传入事务会话session
  4. 提交事务:如果更新操作成功,调用commitTransaction提交事务。
  5. 异常处理:如果过程中出现错误,捕获并打印错误信息。
  6. 关闭连接:无论事务成功或失败,最后都关闭数据库连接。

若使用Python的PyMongo库,代码如下:

from pymongo import MongoClient
from pymongo.errors import PyMongoError

uri = "mongodb://localhost:27017"
client = MongoClient(uri)

def update_student_scores():
    try:
        with client.start_session() as session:
            session.start_transaction()
            db = client['yourDatabaseName']
            students_collection = db['students']
            students_collection.update_many(
                {'age': {'$gt': 18}},
                {'$inc': {'score': 10}},
                session=session
            )
            session.commit_transaction()
            print('分数更新成功')
    except PyMongoError as e:
        print('事务处理失败', e)
    finally:
        client.close()

update_student_scores()

Python代码逻辑与JavaScript类似,通过start_session开启会话,start_transaction开启事务,update_many执行更新操作,commit_transaction提交事务,并处理可能出现的异常和关闭数据库连接。