注册

详解MongoDB的get_prev_error()函数:获取上一次错误信息

MongoDB的getPrevError()函数

MongoDB提供了getPrevError()函数来获取由于最近一次写入操作而引起的上次错误(官方文档)。

语法:

db.getPrevError()

返回结果:

返回一个文档,其中包含关于上次错误的信息。

该文档有以下字段:

  • err:一个字符串,如果上一次操作没有出错,则为空字符串。否则为错误信息。
  • n:上一次影响的文档数 (仅适用于写操作; 默认值为0)
  • ok:如果上一次操作没有出错,则为1。否则为0。
  • wtimeout:一个布尔型来指示上一次写操作是否超时。

实例1:通过getPrevError()获取上一个错误信息

假设在执行一次insert操作失败后,再执行getPrevError()查看上一次错误信息。

执行如下insert语句:

> db.mycol.insert({“title”:”MongoDB 教程”,”description”:”mongodb 教程”})
WriteResult({ “nInserted” : 1 })
> db.mycol.insert({“title”})

此时发现有一个参数不符合类型规则时,insert操作失败。接着执行getPrevError():

> db.runCommand({"getPrevError":1})
{ “waitedMS” : 0, “error” : { “code” : 9, “errmsg” : “insertDocument :: caused by :: 6.0 is not an object” }, “hadError” : true, “ok” : 0 }

可以看到,error字段的值为错误信息字符串。

实例2:检查是否存在上个错误

假设想在执行某个处理逻辑时,检查是否存在上个写入操作出现的错误。

可以如下执行操作:

> var prevError = db.runCommand({getPrevError:1});
> if (prevError.err) { 
    print (“上一次操作出错了,错误信息:”+prevError.err); 
  } else {
    print (“上一次操作成功”); 
  }

可以看到,该段代码能通过getPrevError()函数,获取上个写入操作的错误状态,并进行下一步业务处理。