Mongo 分片集群中的重复键错误

Duplicate key error in Mongo Sharded Cluster

我 运行 在 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。

错误: 如果对同一封新邮件执行上述过程两次,则会导致重复密钥错误。第二次迭代将无法找到订阅者,因此它将尝试插入,尽管文档已存在于集合中。

据我所知,拥有上述客户端的单个实例 运行 不应导致重复键错误,但它确实会导致。

这将是 findAndModify command, or the findOneAndUpdate method 的工作。

有一个 upsert 标志,如果文档不存在,它将创建该文档。如果创建了新文档,您还必须使用 new 标志 return。