NodeJS本地驱动程序上的示例MongoDB错误是什么样的?

我似乎无法find他们的文档或在互联网上的任何MongoDB错误对象的例子。

什么是一个示例MongoDB错误对象的样子? 我想“处理”错误和/或重新格式化它为我自己的目的,这取决于错误是什么。

mongodb 1.3.23驱动程序的MongoDB 2.4.8开始,它们看起来像这样:

 { "name":"MongoError", "err":"E11000 duplicate key error index: test.test.$country_1 dup key: { : \"XYZ\" }", "code":11000, "n":0, "connectionId":10706, "ok":1 } 

MongoError对象

对于更新版本的节点mongodb驱动程序 (例如2.2),情况有点不同。

在nodejs驱动程序源代码中,您可以看到错误对象属性可以是各种各样的(请参见第34行)。 只有名称和消息字段总是可用的。

我在这里粘贴一些有趣的代码,从mongodb-core/lib/error.js ,看最后一个for循环。

 function MongoError(message) { this.name = 'MongoError'; this.message = message; Error.captureStackTrace(this, MongoError); } MongoError.create = function(options) { var err = null; if(options instanceof Error) { err = new MongoError(options.message); err.stack = options.stack; } else if(typeof options == 'string') { err = new MongoError(options); } else { err = new MongoError(options.message || options.errmsg || options.$err || "n/a"); // Other options for(var name in options) { err[name] = options[name]; } } return err; } 

所以,一个错误对象至less会看起来像这样:

 { "name": : "MongoError", "message": "E11000 duplicate key error collection: main_db.stores index..." } 

err.code字段

所以,没有其他的领域的保证,但code是相当普遍的(和非常有用的)。 这个数字是一个mongodb内部错误代码,驱动程序只是将它添加到MongoError对象(如果可用)。 您可以在mongodb源代码文件中find最新的错误代码列表: error_codes.err 。

有关nodejs驱动程序如何pipe理mongodb错误代码的一个有趣的例子是集合bulkWrite源代码 ,它使用toError utils和code来引发MongoError。