Node.js 使用mongoose和mongoose版本更新条目时的新版本

Node.js 使用mongoose和mongoose版本更新条目时的新版本,node.js,mongoose,database-versioning,mongoose-plugins,Node.js,Mongoose,Database Versioning,Mongoose Plugins,我试图使用mongoose跟踪mongo数据库中某些文档的所有修订。出于这个原因,我决定使用插件mongoose版本 当我创建一个新文档并将其添加到数据库时,我可以看到一个版本保存在存储不同版本的集合中。但是,当我用新文档更新文档时,我可以看到在存储文档的集合(最新版本)中所做的更改,但不能看到存储在版本化数据库中的新版本。有什么线索可以解释为什么会发生这种情况吗 这是我的模式: var userSchema = new mongoose.Schema({ name : Str

我试图使用mongoose跟踪mongo数据库中某些文档的所有修订。出于这个原因,我决定使用插件mongoose版本

当我创建一个新文档并将其添加到数据库时,我可以看到一个版本保存在存储不同版本的集合中。但是,当我用新文档更新文档时,我可以看到在存储文档的集合(最新版本)中所做的更改,但不能看到存储在版本化数据库中的新版本。有什么线索可以解释为什么会发生这种情况吗

这是我的模式:

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);
    }
});
这就是我更新用户详细信息的方式(基本上只有名称可以更改,但在我学习的过程中只是为了演示)


任何帮助或提示都将不胜感激,因为我也是使用mongo和mongoose的新手

到目前为止,mongoose版本不支持update()。原因是因为mongoose的save vs update的特性(没有挂钩)。我相信mongoose现在已经有了更新的钩子,但mongoose版本还没有更新

<> P>一个你可以考虑的替代方法就是保存所有的OrgOs。取决于您的用例,但这可能是最容易设置/维护的,并且缺少更改的边缘情况应该少很多


我不能相信这个建议。它来自:

这件幸运吗?是的。我使用集合进行了我自己的版本控制,正如我在开始时打算的那样。首先,我在我想要版本化的集合文档中添加了一个属性
\u revision
。然后在我的代码中,每当我想向数据库写入一个新版本时,我都会将这个值增加1。然后,基本上我克隆了repo,并在
collection.js
文件中稍微修改/添加了代码(大约4-5行代码)。诀窍是创建一个克隆模式,使对象id是随机的(默认值),并通过
\u revision
属性引用相应的版本。因此,克隆模式几乎是我正在保存的文档的最新版本的副本。因此,没有真正的问题我必须小心或照顾,因为我不是修改内容,我只是复制。我还提出了这里的建议:如果所有这些听起来太模糊,请告诉我,我可以尝试编写一个更有意义的答案,并将其作为问题的实际答案发布。
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);
    }
);