Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB唯一索引错误:如何知道哪个字段产生了错误?_Mongodb - Fatal编程技术网

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

MongoDB唯一索引错误:如何知道哪个字段产生了错误?,mongodb,Mongodb,更新:这个问题是针对MongoDB 1.8.x提出的,而公认的解决方案是针对MongoDB 1.8.x的。但是,请注意,Mongo2.x已经对错误消息进行了更改,以便您可以知道哪些字段在更新和插入时生成了错误(请参见下面Kyle和Remon的评论) 是否有方法尝试Mongo upsert,如果存在唯一索引冲突,则知道是哪个字段导致了问题——一次数据库操作? 例如,假设我有一个customers集合,其中包含\u id和name属性。另外,假设名称存在一个,以确保没有两个客户文档具有相同的名称 目

更新:这个问题是针对MongoDB 1.8.x提出的,而公认的解决方案是针对MongoDB 1.8.x的。但是,请注意,Mongo2.x已经对错误消息进行了更改,以便您可以知道哪些字段在更新和插入时生成了错误(请参见下面Kyle和Remon的评论)

是否有方法尝试Mongo upsert,如果存在唯一索引冲突,则知道是哪个字段导致了问题——一次数据库操作?

例如,假设我有一个
customers
集合,其中包含
\u id
name
属性。另外,假设
名称
存在一个,以确保没有两个
客户
文档具有相同的
名称

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

  • 查询
    客户
    ,查看是否已经存在一个名为我将要插入/更新的文档
  • 如果不存在冲突,则进行反向插入
  • 我希望能够在一次操作中完成这项工作,并且,如果出现错误,知道是哪个字段导致了问题

    如果操作是创建一个新文档,这在某种程度上是可能的。Mongo返回错误E11000重复键错误索引:{index name}。这有点像黑客,但我可以使用正则表达式解析出索引名(在我的例子中,它包含字段名)

    但是,在更新文档时,错误消息没有关于索引或字段的信息。它只是简单的“
    E11001更新时的重复键”


    如果有必要的话,是否有其他人对聪明的方法提出建议,以提高效率,并知道哪些字段会导致独特的索引问题?为了避免插入…

    ,解析错误消息是最好的选择。不幸的是,对于更新,除了尝试检查集合中的现有数据外,没有更好的方法。尽管如此,您仍可以随时提出增强。

    您正在运行哪个版本的MongoDB?这在2.0.1中似乎是固定的。我刚刚测试了它,它在一次升级过程中给出了令人不快的索引,我使用的是1.8.x,但是知道2.x中的这个变化很好。谢谢@KyleBanker和@RemonvanVliet!