MongoDB 唯一索引错误:如何知道哪个字段生成了错误?

Cli*_*ris 5 mongodb

更新:这个问题是关于 MongoDB 1.8.x 提出的,接受的解决方案适用于 1.8。但请注意,Mongo 2.x 对错误消息进行了更改,以便您可以知道哪些字段在更新和插入时生成错误(请参阅下面来自 Kyle 和 Remon 的评论)。

有没有一种方法可以尝试 Mongo upsert,并且如果存在唯一索引违规,则知道哪个字段导致问题 - 所有这些都在一个数据库操作中?

例如,假设我有一个具有和属性customers的集合。另外,假设存在唯一索引,以确保没有两个文档具有相同的._idnamenamecustomername

目前,我执行两个数据库操作来执行更新插入:

  1. 查询customers以查看是否已存在具有我要插入/更新的名称的文档。
  2. 如果不存在冲突则执行更新插入。

我希望能够在单个操作中完成此操作,并且如果出现错误,知道哪个字段导致了问题。

如果操作是创建新文档,这是可能的。蒙戈返回错误E11000 duplicate key error index: {index name}。这有点麻烦,但我可以使用正则表达式来解析索引名称(在我的例子中,其中包含字段名称)。

但是,更新文档时,错误消息没有有关索引或字段的信息。简直就是“ E11001 duplicate key on update”。

有没有其他人有关于执行更新插入的智能方法的建议,并了解哪些字段导致唯一索引问题(如有必要)?希望避免服务器端存储 JavaScript 函数......

Nat*_*Nat 3

对于插入,解析错误消息是最好的选择。不幸的是,对于更新,除了尝试检查集合中的现有数据之外,没有更好的方法。不过,请随意在https://jira.mongodb.org上提出改进。