【发布时间】:2015-01-08 00:42:09
【问题描述】:
我有以下模型供用户使用:
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 与upsert: true 一起使用的目的是返回现有配置文件或创建新配置文件。它还会根据发布的数据更新任何字段。
但是,created 字段每次都会更新为当前日期,即使未发布创建的字段。如何确保该字段只设置一次?
编辑
数据库中的示例对象:
{
"_id" : ObjectId("54620b38b431d48bce7cab81"),
"email" : "someone@google.com",
"__v" : 0,
"name" : "somone",
"sex" : "male"
}
事实证明,即使在使用 upsert 创建新对象时,也没有设置 created 字段。 Mongoose 只是根据架构返回当前日期,即使它在文档中不存在。
所以,现在的问题变成了:如何确保使用 upsert 为参数中未提供的字段创建默认值?
【问题讨论】:
-
您能否在问题中写下您的
user对象。这样我就可以尽力帮助你了。 -
@techxxx 请检查编辑。
标签: node.js mongodb mongoose mongodb-update