1

mongoose を使用して、mongo データベース内のいくつかのドキュメントのすべてのリビジョンを追跡しようとしています。このため、プラグイン mongoose-version を使用することにしました。

新しいドキュメントを作成してデータベースに追加すると、さまざまなバージョンを格納するコレクションにバージョンが保持されていることがわかります。ただし、ドキュメントを新しいドキュメントで更新すると、ドキュメントを格納するコレクション (最新バージョン) に加えられた変更が表示されますが、バージョン管理されたデータベースに格納された新しいバージョンは表示されません。なぜこれが起こっているのか、何か手がかりはありますか?

これは私のスキーマです:

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);
    }
);

私はmongoとmongooseも使用する初心者でもあるので、どんな助けやヒントも大歓迎です。

4

1 に答える 1