我是mongoose的新手,所以这可能是非常简单..然而。
我有一个非常简单的架构,其中包含一个简单的数字数组:
userSchema = new mongoose.Schema({
name : String,
tag_id : String,
badges : [Number]
});
var user = mongoose.model( 'User', userSchema );
稍后我想为用户添加徽章。所以..
user.findOne({tag_id:tagid}, function(err,doc) {
if (!doc) callback(false, 'no doc');
// check to see if badge is in array, if not add it
if ( doc.badges.indexOf(badgeNum) == -1 ) {
doc.badges.push(badgeNum);
doc.save( function(err) {
if (err) callback( false, err );
else callback( true, '');
});
} else {
callback( false, 'user already had badge' )
}
});
但是每当我运行该代码时,我都会收到“VersionError:找不到匹配的文档。”
我做了一点谷歌搜索,发现在3.x mongoose中添加了版本控制的引用,并且它通常都是内部处理的。应该注意的是,我通过json和mongo命令行将这个用户数据直接加载到mongo中(因此默认情况下不会定义版本控制变量,但我怀疑mongoose会在没有找到它的情况下创建它...不好的假设?)
编辑:抱歉,我的简化示例中有错误。
答案 0 :(得分:4)
我通过向导入的数据集添加版本控制字段并修改架构以将其与versionKey关联来解决此问题。
http://mongoosejs.com/docs/guide.html#versionKey
我确实想知道,但是如果没有设置允许mongoose将默认版本密钥(__v)添加到缺少它的数据。
答案 1 :(得分:0)
您正尝试将testSchema
分配给user
对象而不是userSchema
,因此它正在寻找尚未创建的文档类型。
将用户分配更新为以下内容:
var user = mongoose.model('User', userSchema);
如果您不确定自己在做什么,我建议您关注the guides。