Node.js 稳妥地检索哪个字段是CAU';重复键错误';在蒙哥

Node.js 稳妥地检索哪个字段是CAU';重复键错误';在蒙哥,node.js,mongodb,Node.js,Mongodb,因此,mongo在代码11000或11001上抛出如下错误消息: { [MongoError: E11000 duplicate key error index: mean-dev.users.$username_1 dup key: { : "asdasd" }] name: 'MongoError', err: 'E11000 duplicate key error index: mean-dev.users.$username_1 dup key: { : "asdasd" }

因此,mongo在代码11000或11001上抛出如下错误消息:

{ [MongoError: E11000 duplicate key error index: mean-dev.users.$username_1  dup key: { : "asdasd" }]
  name: 'MongoError',
  err: 'E11000 duplicate key error index: mean-dev.users.$username_1  dup key: { : "asdasd" }',
  code: 11000,
  n: 0,
  connectionId: 718,
  ok: 1 }
现在,我正在解析错误消息,以检索哪个字段有重复的密钥,这是非常脏的。i、 e:我不想在不同的索引(多键、复合等)上测试所有类型的重复错误,看看这个解析器是否仍然有效


节点中是否有我可以使用的帮助程序,让我能够针对此类错误可靠地检索有问题的字段

如果要查看索引的实际键,而不是分析不可靠的字符串,只需像下面这样查询system.indexes集合:

db.collection('system.indexes').findOne({ ns: 'mean-dev.users', name: 'username_1' }, cb);
这将生成一个包含键对象的文档,列出构成此索引键的所有字段名,例如:

{
  v: 1,
  ns: 'mean-dev.users',
  name: 'username_1',
  key: {
    username: 1
  }
}

不要这样认为,假设
mongodb
驱动程序按原样传递服务器生成的错误(用于获取最后一个错误的服务器命令,如
db.getLastErrorObj()
),也没有多大帮助)。这些值应该很容易计算出来。您可能需要db/集合名称、索引名称和有问题的重复键
dup_key
是有问题的重复值。您可以在
$
上拆分命名空间;左侧部分是db.collection名称,右侧部分是索引名称。所以“mean-dev.users.$username_1”=>“mean-dev.users”(db.collection)、“username_1”(索引名)。@stennie:问题是从索引名到键名。indexname是否总是从键派生,以及如何对多值索引或复合索引执行此操作。这就是“健壮性”,或者说缺乏健壮性,我指的是依赖解析字符串来实现这一点绝对是胡说八道。mongodb(或nodejs驱动程序)没有理由不返回更有用的结构。如果我依赖于此,我会害怕更新到新的次要版本,因为我的代码可能会被破坏。所以我必须为它做一个集成测试。。。白痴。如果你支持修复这个问题,请投票表决这个问题: