我正試圖使用貓鼬在mongo數據庫中的某些文檔中保留所有修訂的跟蹤。出於這個原因,我決定使用插件貓鼬版本。使用貓鼬和貓鼬版本更新條目時的新版本
當我創建一個新文檔並將其添加到數據庫時,我可以看到版本保存在存儲不同版本的集合中。但是,當我使用新文檔更新文檔時,可以看到在存儲文檔的集合(最新版本)中進行的更改,而不是存儲在版本化數據庫中的新版本。任何線索爲什麼這可能會發生?
這是我的架構:
var userSchema = new mongoose.Schema({
name : String,
username : { 'type': String, 'unique': true },
email : { 'type': String, 'unique': true },
createdOn : { 'type': Date, 'default': Date.now },
modifiedOn: { 'type': Date, 'default': Date.now }
});
mongoose.model('User', userSchema, 'users');
// Versioning options
var userVersioningOptions = {
collection: 'versionedUsers',
logError: true,
suppressVersionIncrement: true, // default value
strategy: 'array',
removeVersions: false // default value
};
userSchema.plugin(version, userVersioningOptions);
這是我如何創建用戶:
User.create({
name : request.body.FullName,
username : request.body.UserName,
email : request.body.Email,
modifiedOn: Date.now()
}, function (err, user) {
if (err) {
console.log(err);
if (err.code === 11000) {
response.redirect('/users/new?exists=true');
}
else {
response.send("Error while creating new user. The error code was " + err.code + " and the entire error " + err);
//response.redirect('users/new?error=true');
}
}
else {
console.log("User created and saved: " + user);
response.redirect('/users/' + user.username);
}
});
這就是我如何更新用戶的詳細信息(基本上只有名稱可以改變,但是我正在學習時用於演示目的)。
User.update(
{username: newDetails.username},
{$set: {name: newDetails.name, modifiedOn: Date.now()}},
{upsert: false, multi: true},
function (err, numAffected) {
if (err)
throw err;
console.log("The error was " + err);
console.log("Updated " + numAffected + " documents");
response.send({}, 200);
}
);
任何幫助或提示將非常感謝,因爲我也是一個新手在使用芒果和貓鼬以及。
運氣與這一個嗎? –
是的。我在開始時按照自己的意願做了自己的版本控制。首先,我在我想要版本的集合的文檔中添加了一個屬性'_revision'。然後在我的代碼中,每次我想爲db寫一個新版本時,我都會將這個值加1。然後,基本上我克隆了repo,並且我在''collection.js'文件(大約4-5行代碼)上稍微修改/添加了代碼。訣竅是創建一個克隆模式,以便對象id是隨機的(默認),並通過'_revision'屬性引用相應的版本。 – MightyMouse
因此,克隆的模式幾乎是字面上是我保存的文檔的最新版本的副本。因此,我沒有真正的問題,我不得不小心或照顧,因爲我沒有修改內容,我只是複製。我也在這裏提出了修改建議:https://github.com/saintedlama/mongoose-version/issues/9 – MightyMouse