在我的 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 count
of 0
,并最终每个创建和保存(相同)文档到集合中。
这听起来可能吗?如果是这样,我如何在不设置超时或使用同步模式的情况下强制文档写入的唯一性?