可以說我有一個mongoDB數據庫,在該數據庫中創建屬於同時將文檔和用戶存儲在數據庫中的用戶的文檔。mongodb/mongoose,在更改兩個文檔時如何確保數據一致
讓我們進一步說,用戶對象包含對文檔的引用。
創建一個新文檔可能看起來像這樣。
exports.create = function (req, res, next) {
//make a new document
var newDoc = new Document({
title: req.body.title,
content: req.body.content,
});
User.findById(req.user._id, function (err, user) {
if (err)
return res.send(400);
user.documents.push(newDocument._id);
user.save(function(err){
if (err)
return res.json(400, err);
newDoc.save(function(err) {
if (err)
return res.json(400, err); //<--- What if you have an error here??
return res.json(200, {document:'successfully created'});
});
});
});
};
如果你有在最後,如果(ERR)的錯誤,你會加入到一個新的文檔的引用給用戶,但文件不會被創建。
當然這是一個非常簡單的例子。由於大量的文檔相互引用,它會變得複雜得多。在Mongo/Mongoose中處理這個問題的最簡單方法是什麼?
您似乎在尋找事務和回滾,這是不存在的。如果你真的**必須**維護單獨的集合,那麼至少要先嚐試「保存」引用的文檔**。然後用參考更新「主」文件。任何「回滾」都必須手動完成。 –