0

在我的 MongoLab 数据库中通过 nodejs 将新文档保存到 mongodb 集合之前,我使用 model.count 检查某些字段以防止重复条目:

MyModel.count({field1: criteria1, field2: criteria2}, function (err, count) {
  if (count == 0) {
    // Create new document and call .save()
  }
});

但是,在测试过程中,我注意到过程完成后集合中有许多重复项(测试运行的数量不一致),尽管不像我没有进行 .count() 检查那样多。

由于该MyModel.count()语句嵌入在一个回调中,每当'readable'事件由几个 ReadStream 之一发出时就会重复调用,我怀疑存在由快速写入集合引起的异步问题。具体来说,两个或多个相同且几乎同时调用MyModel.count返回 a countof 0,并最终每个创建和保存(相同)文档到集合中。

这听起来可能吗?如果是这样,我如何在不设置超时或使用同步模式的情况下强制文档写入的唯一性?

4

1 回答 1

1

正如彼得评论的那样,强制唯一性的正确方法是在这些字段的集合上创建一个唯一索引,然后处理code: 11000插入错误以从创建重复项的尝试中恢复。

您可以在创建模型之前通过架构添加索引:

mySchema.index({field1: 1, field2: 1}, {unique: true});
于 2013-11-15T14:22:44.097 回答