Mongodb 使用mongo go驱动程序,如何有效地从WriteError检索重复的字段名?

Mongodb 使用mongo go驱动程序,如何有效地从WriteError检索重复的字段名?,mongodb,go,mongo-go,Mongodb,Go,Mongo Go,我的收藏中有三个唯一的索引。当用户意外地在字段B中插入重复数据时,我如何知道重复来自字段B? 对于唯一索引约束冲突,mongo go驱动程序行为返回errWriteException,它基本上由一个WriteError数组和一些其他对象组成。 WriteError本身(来自mongo go驱动程序): 在调试会话期间,我发现WriteError的值为: { Index: 0 Code: 11000 Message: E11000 duplicate key error c

我的收藏中有三个唯一的索引。当用户意外地在字段
B
中插入重复数据时,我如何知道重复来自字段
B


对于唯一索引约束冲突,mongo go驱动程序行为返回err
WriteException
,它基本上由一个WriteError数组和一些其他对象组成。

WriteError
本身(来自mongo go驱动程序):

在调试会话期间,我发现WriteError的值为:

{
    Index: 0
    Code: 11000
    Message: E11000 duplicate key error collection: auth.example index: B_1 dup key: { : "default-role-external-user" }
}
我知道我总是可以通过
code
(11000)推断出唯一的约束冲突,但是库没有提供单个字段来检索字段名,从而导致重复错误


我知道我总是可以解析
消息
字符串作为最后的手段,但是考虑到Golang和MongoDB已经共存很长时间了,而且我确信我不是唯一遇到这个问题的人,我期待更健壮、更高效的方法来检索导致重复错误的字段名,我还没有找到。

简短而令人悲伤的答案是,目前没有更好的方法使用官方mongo go驱动程序。

需要知道是否已经使用了唯一字段中的值的应用程序通常会在数据库中查询该值,而不是按照您的要求解析服务器返回的消息


这种情况并不特定于MongoDB或Go-我不知道有任何MongoDB驱动程序会从错误消息中解析出唯一的索引冲突,我也没有听说过对关系数据库进行这种操作。

等等,开发人员实际上使用了类似解析错误消息字符串这样的黑客方法来解决这个问题?@icza这是我从您那里看到的最短答案@我不知道他们用不用这个。提问者Eklavya提出了一个经过充分研究的问题,几乎列出了他/她可行的选择,并询问是否有更简单的方法。没有。所以我认为目前的答案是“有”。
{
    Index: 0
    Code: 11000
    Message: E11000 duplicate key error collection: auth.example index: B_1 dup key: { : "default-role-external-user" }
}