保存 Mongoose 文档时出现版本错误

2024-05-04

我有一个问题 - 不确定我是否做错了什么或者这是一个错误。我有一些产品 - 每一种都有一系列的变体。我想浏览一些数据并以这些变体加载它,但我遇到了许多“版本错误:找不到匹配的文档”错误。

认为我遇到了竞争条件(我为我修改的每个变体依次保存相同的文档),我使用了 asyc.eachSeries() 但这没有帮助。一次加载导致错误的文档不会产生错误,因此它似乎与某些竞争条件有关,但我无法追踪它。

Schema:

var Product = new Schema({
  title: {
    type: String,
  },  
  variations: {
    type: Array
  }
});

示例代码:

// 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);
});

我认为问题在于你如何定义你的模式。最好有变体是它自己的模式,并让产品模式使用它作为子文档。我会把它改成这样:

var Variant = new Schema({
    code: String,
})

var Product = new Schema({
    title: String,
    variants: [Variant]
})

然后你可以像这样浏览记录:

var variants = product.variants
for (i in variants) {
    var variant = variants[i]
    variant.code = records[i].code
    variant.save(function(err) {
        ...
    })
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保存 Mongoose 文档时出现版本错误 的相关文章

随机推荐