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

时间:2011-12-12 16:56:00

标签: mongodb

更新:有关MongoDB 1.8.x的问题已被提出,并且已接受的解决方案与1.8相关。但请注意,Mongo 2.x已对错误消息进行了更改,以便您可以确定哪些字段会在更新和插入时生成错误(请参阅下面的Kyle和Remon的注释)。

有没有办法尝试Mongo upsert,如果有唯一的索引违规,知道哪个字段导致问题 - 所有在一个数据库操作中?

例如,假设我有一个customers集合,其_idname属性。另外,假设name存在unique index,以确保没有两个customer文档具有相同的name

目前,我执行两个数据库操作来执行upsert:

  1. 查询customers以查看是否已存在包含我即将插入/更新的名称的文档。
  2. 如果不存在冲突,请执行upsert。
  3. 我希望能够在一次操作中执行此操作,如果出现错误,请知道哪个字段导致了问题。

    如果操作是创建新文档,则这是可能的。 Mongo会返回错误 E11000 duplicate key error index: {index name} 。这有点像黑客攻击,但是我可以使用正则表达式来解析索引名称(在我的例子中,它有字段名称)。

    但是,当更新文档时,错误消息中没有关于索引或字段的信息。它只是“ E11001 duplicate key on update ”。

    是否有其他人有关于智能方法进行upserts的建议,并知道哪些字段导致了唯一的索引问题,如有必要?希望避免server-side stored JavaScript functions ......

1 个答案:

答案 0 :(得分:3)

对于插入,解析错误消息是您最好的选择。不幸的是,对于更新,除了尝试检查集合中的现有数据之外,没有更好的方法。尽管如此,请随意提高https://jira.mongodb.org的增强效果。