2015-10-19 82 views
0

我有以下模式:猫鼬默认W/findOneAndUpdate

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时应该发生这种情况吗?从蒙戈查询

结果:

> db.users.find().pretty() 
{ 
    "_id" : ObjectId("56255f415641ace1204de658"), 
    "username" : "Test", 
    "displayName" : "Test User" 
} 

回答

1

在猫鼬文档发现这一点:

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