VersionError:仅在(Mocha)testing中发现匹配的文档错误

我已经阅读了其他问题/答案的人有版本的关键,但由于某种原因,我不明白为什么这具体发生在我的情况。

所以我有以下摩卡testing:

it('should be able to save one job', function (done) { Promise.join(user.saveAsync(), company.saveAsync(), function (savedUser, savedCompany) { user = savedUser[0]; user.jobs.push(job); user.saveAsync() .spread(function (savedUserWithJob) { user = savedUserWithJob; user.jobs.should.have.length(1); done(); }) .catch(function (err) { done(err); }); }); }); 

这一切都很好,并通过。 即使在运行时我也没有任何其他问题。

现在当我尝试在第一个之后再次运行相同的testing时,

  it('should be able to save one job', function (done) { ..... }); it('should be able to save one job again', function (done) { ..... }); 

第二个失败,错误:

VersionError:未find匹配的文档。

我真的不明白为什么会发生这种情况,因为我已经在没有版本问题的情况下第一次推入arrays了。 为什么连续第二次失败?

Mongoose versionKey在文档上保存一个版本号,通常名为__v

只要对数组的修改可能改变任何数组元素的位置,该值就会自动递增。 对于任何需要使用位置表示法的更新,该值也会在where子句中发送。 如果我们的where子句仍然匹配文档,它确保没有其他操作已经改变了我们的数组元素的位置,可以使用使用位置语法。 ( 在这里阅读更多 )

在你的testing中,首先save() ,文档增加了__v ,这应该在你的文档上更新以供mongoose作为第二个save()where clause一部分使用。