繁体   English   中英

Node,Mongoose:on save()“VersionError:找不到匹配的文档。”

[英]Node, Mongoose: on save() “VersionError: No matching document found.”

我是猫鼬的新手所以这可能是非常简单的事情。但是。

我有一个非常简单的架构,其中包含一个简单的数字数组:

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会在没有找到它的情况下创建它...不好的假设?)

编辑:抱歉,我的简化示例中有错误。

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

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

我确实想知道,但是如果没有设置允许mongoose将缺省版本密钥(__v)添加到缺少它的数据。

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

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

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

如果您不确定自己在做什么,我建议您按照指南进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM