mongoose: Version Error: no matching doc found
I have an issue - not sure if I am doing something wrong or it’s a bug. I have some products - each of these has an array of variations. I want to go through some data and load it in these variations but I experience a number of ‘VersionError: No matching document found’ errors.
Thinking I was having a race condition (I am sequentially saving the same document for each of its variations that I modify) I used asyc.eachSeries() but that did not help. Loading the error causing documents one at the time does not yield the error so it seems related to some race condition but I cannot track it down.
Schema:
var Product = new Schema({
title: {
type: String,
},
variations: {
type: Array
}
});
Sample code:
// Some data to load - the 'variant' is the index of the variations array above
var records = [{
code: 'foo',
id: '50ba9c647abe1789f7000073',
variant: 0
}, {
code: 'bar',
id: '50ba9c647abe1789f7000073',
variant: 1
}, {
code: 'foobar',
id: '50ba9c647abe1789f7000073',
variant: 2
}];
var iterator = function(item, cb) {
Product.findById(item.id).exec(function(err, product) {
if(err) {
return cb(err);
}
if (product) {
product.variations[item.variant].code = item.code.trim();
product.markModified('variations');
product.save(function(err, p) {
return cb(err);
});
} else {
return cb('Missing product');
}
});
};
async.eachSeries(records, iterator, function(err) {
process.exit(1);
});
About this issue
- Original URL
- State: closed
- Created 11 years ago
- Comments: 21 (2 by maintainers)
Hi! I have some problem too! I noticed that usage of logging
modifiedPathsleads to different output data.First saving: [‘Groups’]
More saving: [‘ModifiedAt’, ‘__v’, ‘groups’]
Perhaps the problem is that the new requires do not use current version
__vfield (they use remaining in “client” memory).SOLVED I deleted version property from requests for update.
delete req.body.__v;@dciccale after taking a closer look at your code, yep, that’s expected behavior and a classic example of how versioning is expected to work - overwriting an array when the array changed underneath you is a version error. You can disable versioning or use the skipVersioning to selectively skip a field for versioning if you’re sure you’re not worried about conflicting changes.