面试题答案
一键面试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岁的学生分数。具体步骤如下:
- 连接数据库:使用
MongoClient
连接到本地MongoDB服务器。 - 开启事务:调用
startSession
开启会话,并在会话上调用startTransaction
开启事务。 - 执行更新操作:使用
updateMany
方法,更新符合条件(年龄大于18岁)的文档,将其score
字段增加10分,并传入事务会话session
。 - 提交事务:如果更新操作成功,调用
commitTransaction
提交事务。 - 异常处理:如果过程中出现错误,捕获并打印错误信息。
- 关闭连接:无论事务成功或失败,最后都关闭数据库连接。
若使用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
提交事务,并处理可能出现的异常和关闭数据库连接。