在 PHP 框架中使用 MongoDB 时,要确保数据一致性,可以采取以下措施:
session
和 withTransaction
方法来实现事务。use MongoDB\Client as Mongo;
$mongo = new Mongo();
$session = $mongo->startSession();
$session->startTransaction();
try {
// 执行需要保证数据一致性的操作
$mongo->db("testdb")->collection("testcoll")->insertOne($document1, ["session" => $session]);
$mongo->db("testdb")->collection("testcoll")->updateOne(["_id" => $document1["_id"]], ['$set' => $document2], ["session" => $session]);
// 提交事务
$session->commitTransaction();
} catch (\Exception $e) {
// 发生异常,回滚事务
$session->abortTransaction();
throw $e;
} finally {
// 结束会话
$session->endSession();
}
findAndModify
方法实现乐观锁。use MongoDB\Client as Mongo;
$mongo = new Mongo();
$collection = $mongo->db("testdb")->collection("testcoll");
// 读取数据时获取版本号
$document = $collection->findOne(["_id" => $documentId], ["_id" => 1, "version" => 1]);
// 检查版本号是否一致
if ($document["version"] == 1) {
// 更新数据时,版本号加 1
$newVersion = $document["version"] + 1;
$result = $collection->updateOne(["_id" => $documentId, "version" => $document["version"]], ['$set' => $data, '$inc' => ["version" => 1]]);
if ($result->modifiedCount == 1) {
// 更新成功
} else {
// 版本号不一致,表示数据已被其他事务修改,回滚操作
}
} else {
// 版本号不一致,表示数据已被其他事务修改,回滚操作
}
通过使用事务和乐观锁,可以在 PHP 框架中使用 MongoDB 时确保数据一致性。