首页 > 解决方案 > Mongoose,findByIdAndUpdate,更新除一个之外的所有?

问题描述

我不明白,但是当创建用户时,日期是指创建帐户的日期。但是当用户更新他们的信息时,“日期”也会更新。我究竟做错了什么?

我的模型:

var userinfoSchema = new mongoose.Schema({
    type_        : String,
    firstname    : String,
    surname      : String,
    organization : String,
    name         : String,
    person_role  : String,
    members_num  : Number,
    address      : String,
    postal_code  : String,
    city         : String,
    country      : String, 
    tel          : String,
    date: { type: Date, default: Date.now }
});

var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    userinfo: [userinfoSchema]
});

还有我的应用功能:

app.put("/Edit/:id", function(req,res) {
    User.findByIdAndUpdate(req.params.id, {$set: { userinfo: req.body.userinfo}}, 
    function(err, updated) {
        if(err) {
            res.redirect('/Edit');
        } else {
            console.log(updated);
            res.redirect('/Profil');
        }
    });
});  

标签: expressmongoose

解决方案


这是我认为最好的答案,搜索了一个星期后......

从 Mongoose 4.0 开始,您现在可以在 Schema 上设置时间戳选项,让 Mongoose 为我们处理这个问题:

var thingSchema = new Schema({..}, { timestamps: true });

所以在这种情况下:模型应该是这样的:

var userinfoSchema = new mongoose.Schema({
    type_        : String,
    firstname    : String,
    surname      : String,
    organization : String,
    name         : String,
    person_role  : String,
    members_num  : Number,
    address      : String,
    postal_code  : String,
    city         : String,
    country      : String, 
    tel          : String,
});

var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    userinfo: [userinfoSchema]
}, { timestamps: true });

就像,我们可以看到 : date: { type: Date, default: Date.now } 不是一个好的选择。

时间戳创建两个字段:“createdAt”和“updatedAt”,如下图所示:createdAt 永远不会改变,updatedAt 将在用户更新他们的数据时改变

注意:我们也可以通过“日期”或类似这样的方式更改“createdAt”:

var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    userinfo: [userinfoSchema]
}, { createdAt: 'date', updatedAt: 'update_date' });

推荐阅读