我有以下架构:
var UserSchema = new Schema({
username: { type: String, required: true, unique: true },
displayName: { type: String, required: true },
registered: { type: Boolean, required: true, default: false }
});
然后我尝试使用findOneAndUpdate插入和对象:
var user = {
displayName: "Test User"
}
User.findOneAndUpdate({username: "test"}, user, {new: true, upsert: true}, function(err, newUser) {
callback(err, newUser);
});
用户被正确创建(在第一次尝试时,因为它不存在)。但是,注册字段不会设置为false。当我执行findOneAndUpdate时会发生这种情况吗?
来自mongo查询的结果:
> db.users.find().pretty()
{
"_id" : ObjectId("56255f415641ace1204de658"),
"username" : "Test",
"displayName" : "Test User"
}
答案 0 :(得分:4)
在mongoose docs中找到了这个:
findAndModify帮助程序支持有限的默认值和验证。您可以 通过设置setDefaultsOnInsert和runValidators来启用它们 选项,分别。
如果有其他人遇到此事。
var user = {
displayName: "Test User"
}
User.findOneAndUpdate({username: "test"}, user, {setDefaultsOnInsert: true, new: true, upsert: true}, function(err, newUser) {
callback(err, newUser);
});