节点,Mongoose:在保存()“VersionError:找不到匹配的文档。

我是新来的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' ) } }); 

但是,每当我运行该代码,我得到一个'版本错误:找不到匹配的文件。

我做了一个小小的search,发现在3.xmongoose中添加版本的参考,并且通常都是在内部处理的。 应该注意的是,我通过json和mongo命令行将这个用户数据直接加载到mongo中(所以它不会有默认定义的版本variables,但是我怀疑mongoose会在没有find的时候创build它。坏的假设?)

编辑:对不起,我简化的例子有一个错误。

我通过将版本字段添加到导入的数据集并修改模式以将其与versionKey关联来解决此问题。

http://mongoosejs.com/docs/guide.html#versionKey

我想知道,但是,如果没有让mongoose的设置添加默认版本键(__v)缺乏它的数据。

您正在尝试将testSchema分配给user对象,而不是userSchema因此它正在查找尚未创build的文档types。

将用户分配更新为以下内容:

 var user = mongoose.model('User', userSchema); 

如果你不确定你在做什么,我build议你按照指南 。