Mongo分片群集中的重复密钥错误

时间:2019-02-03 08:46:44

标签: mongodb distributed

我遇到了Mongo分片群集(MSC)中的重复键错误,该错误在使用Mongo副本集时不会发生。

我在客户端应用程序中具有简单的操作:

// pseudocode - email is unique key
subscriber = db.newsletter.find({email: "john@smith.com"})
if (subscriber == null) {
  db.newsletter.insert({email: "john@smith.com", name: "John"})
} else {
  db.newsletter.update({email: "john@smith.com"}, {name: "John"})
}

我没有在上面的代码中包含它,但是我需要检索文档的_id,因此不能使用upsert。

错误: 如果对相同的电子邮件和新的电子邮件执行两次以上过程,将导致重复的密钥错误。第二次迭代将无法找到订户,因此尽管文档已在集合中,它仍将尝试插入。

据我所知,具有上述客户端的单个实例运行不会导致重复的密钥错误,但确实如此。

1 个答案:

答案 0 :(得分:2)

这将是findAndModify commandfindOneAndUpdate method的工作。

有一个upsert标志,如果该文件不存在,它将创建该文件。您还必须使用new标志来返回新文档(如果已创建)。