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