我有以下用户模型:
var UserSchema = new mongoose.Schema({
name: String,
dob: Date,
sex: String,
photo: String,
email: {type: String, index: {unique: true, required: true}},
created: {type: Date, default: Date.now}
});
var User = mongoose.model('Users', UserSchema);
如您所见,“created”字段采用当前日期的默认值,以便在创建新用户时自动设置。
发布用户详细信息时,我使用以下查询:
User.findOneAndUpdate({email: user.email}, user, {upsert: true}, function (err, user) {
if (err) {
return callback (err);
} else {
callback(null, user);
}
});
使用findOneAndUpdate
with的目的upsert: true
是要么返回现有配置文件,要么创建一个新配置文件。它还会根据发布的数据更新任何字段。
但是,那created
字段每次都会更新为当前日期,即使未发布创建的字段。如何确保该字段只设置一次?
编辑
来自数据库的示例对象:
{
"_id" : ObjectId("54620b38b431d48bce7cab81"),
"email" : "someone@google.com",
"__v" : 0,
"name" : "somone",
"sex" : "male"
}
事实证明,created
即使在使用 upsert 创建新对象时,也没有设置该字段。Mongoose 只是根据模式返回当前日期,即使它在文档中不存在。
所以,现在的问题变成了:如何确保 usingupsert
为参数中未提供的字段创建默认值?