On this page
getLastError
在本页面
Definition
getLastError
- 在 2.6 版中进行了更改:write operations的新协议将写入问题与写入操作集成在一起,从而无需单独的getLastError。 大多数写方法现在返回写操作的状态,包括错误信息。在以前的版本中,Client 端通常结合使用getLastError和写入操作来验证写入是否成功。
返回* current connection *上先前写操作的错误状态。
getLastError使用以下原型形式:
{ getLastError: 1 }
getLastError使用以下字段:
Field | Type | Description |
---|---|---|
j |
boolean | 如果为true ,则在返回之前 await 下一个日志提交,而不是 await 整个磁盘刷新。如果mongod没有启用日记功能,则此选项无效。如果为写入操作启用了此选项,则mongod将不超过当前commitIntervalMs的 1/3 *,然后再将数据写入日志。 |
w |
整数或字符串 | 使用复制运行时,这是返回之前要复制到的服务器数。 w 值 1 表示仅主要。 w 的值为 2 包括主要的和至少一个辅助的,依此类推。代替数字,您还可以将w 设置为majority 来指示该命令应 await,直到最新的写操作传播到大多数有表决权的副本集成员为止。 |
在版本 3.0 中进行了更改:在以前的版本中,majority
引用了副本集的所有成员的大多数,而不是多数投票成员。
如果使用w
,则还应该使用wtimeout
。在不提供wtimeout
的情况下为w
指定值可能会导致getLastError无限期阻塞。
| wtimeout
|整数|可选。毫秒。指定一个毫秒值,以控制 await 写传播完成的时间。如果复制未在给定的时间内完成,则getLastError命令将返回并显示错误状态。
See also
Output
每个getLastError()
命令都会返回一个文档,其中包含下面列出的字段的子集。
getLastError.
ok
- getLastError命令成功完成时,ok是
true
。
- getLastError命令成功完成时,ok是
Note
true
的值不表示先前的操作没有产生错误。
getLastError.
err
- 除非发生错误,否则err是
null
。如果前面的操作有错误,则err
包含一个标识错误的字符串。
- 除非发生错误,否则err是
getLastError.
errmsg
- 2.6 版的新功能。
errmsg包含错误的描述。 errmsg仅在前面的操作出错时出现。
getLastError.
code
getLastError.
connectionId
- 连接的标识符。
getLastError.
lastOp
getLastError.
n
- 如果前面的操作是更新或删除操作,但不是findAndModify操作,则n报告更新或删除操作匹配的文档数。
对于删除操作,匹配文档的数量将等于删除的数量。
对于更新操作,如果该操作未更改文档,例如将字段的值设置为其当前值,则匹配的文档数可能少于实际修改的文档数。如果更新包含upsert:true
选项并导致创建新文档,则n返回插入的文档数。
如果报告通过findAndModify操作发生的更新或删除,则n为0
。
getLastError.
syncMillis
- syncMillis是 await 写入磁盘操作(例如写入日志文件)所花费的毫秒数。
getLastError.
shards
getLastError.
singleShard
- 在写操作之后针对分片群集发出时,标识写操作中目标的分片。 singleShard仅在写入操作恰好针对一个分片的情况下存在。
getLastError.
updatedExisting
- 如果更新影响至少一个文档并且没有导致upsert,则updatedExisting为
true
。
- 如果更新影响至少一个文档并且没有导致upsert,则updatedExisting为
getLastError.
upserted
- 如果更新导致插入,则upserted是文档的
_id
字段的值。
- 如果更新导致插入,则upserted是文档的
在 2.6 版中进行了更改:仅当_id
是ObjectId时,MongoDB 的早期版本才包含upserted。
getLastError.
wnote
- 如果设置,则
wnote
表示先前操作的错误与在getLastError上使用w
参数有关。
- 如果设置,则
See
Write Concern了解有关w
个值的更多信息。
getLastError.
wtimeout
- 如果getLastError由于
wtimeout
设置为getLastError而超时,则wtimeout为true
。
- 如果getLastError由于
getLastError.
waited
- 如果前面的操作使用
wtimeout
设置为getLastError指定了超时,则waited报告超时之前getLastErrorawait 的毫秒数。
- 如果前面的操作使用
getLastError.
wtime
- getLastError.wtime是 await 上一个操作完成所花费的毫秒数。如果getLastError超时,则wtime和
getLastError.waited
相等。
- getLastError.wtime是 await 上一个操作完成所花费的毫秒数。如果getLastError超时,则wtime和
getLastError.
writtenTo
- 如果要写入副本集,则writtenTo是一个数组,其中包含基于命令中
w
字段的值来确认先前的写入操作的成员的主机名和端口号。
- 如果要写入副本集,则writtenTo是一个数组,其中包含基于命令中
Examples
确认复制到两个副本集成员
下面的示例确保前面的操作已复制到两个成员(主要成员和一个其他成员)。该命令还指定了5000
毫秒的超时时间,以确保如果 MongoDB 无法满足请求的写入关注,:dbcommand:getLastError 命令不会永远阻塞:
db.runCommand( { getLastError: 1, w: 2, wtimeout:5000 } )
确认复制到多数副本集
下面的示例确保写入操作已复制到副本集的大多数有投票权的成员。该命令还指定了5000
毫秒的超时时间,以确保如果 MongoDB 无法满足请求的写入关注,:dbcommand:getLastError 命令不会永远阻塞:
db.runCommand( { getLastError: 1, w: "majority", wtimeout:5000 } )
在 2.6 版中进行了更改:在Master/Slave部署中,MongoDB 将w: "majority"
等同于w: 1
。在 MongoDB 的早期版本中,w: "majority"
在master/slave部署中产生错误。