日期:2014-05-16  浏览次数:20402 次

MongoDB Last Error 命令

Last Error Commands

当写入数据库,MongoDB默认的情况下不会响应结果。但是MongoDB提供了命令来保证这些操作是成功的。
当在safe的模式下保存和更新数据库,一些驱动就会自动调用这些命令。我们这详细讲解getlasterror是如何运行的。

getlasterror

getlasterror是验证最后一次连接数据库操作。可以通过以下几种方式来进行调用:

> db.$cmd.findOne({getlasterror:1})

或者

> db.runCommand("getlasterror")

或者用shell辅助方法

> db.getLastError()

更多的命令查看?command documentation.

驱动

各个驱动都支持?getlasterror??以及许多还提供了"safe"模式的操作。如果你使用Python,你可以使用如下语句来自动调用getlasterror。?

collection.save({"name": "MongoDB"}, safe=True)

如果保存失败,异常就会抛出。关于"safe"模式,详情请看各个驱动的文档。

案例


getlasterror 主要用于写操作 (虽然也可以用于其他命令或查询语句. 默认情况下,写操作不会有任何返回:在写的过程中,这样可以避免客户端等待与服务器互相通讯。
如果要返回代码,可以调用getLastError。

如果用多个连接写入数据到MongoDB中,调用getLastError就很重要了,要确保每个连接都把数据成功写入到数据库中。
如果你想通过连接#1写入数据并且从连接#2返回这些写入的数据,你可以在写入连接#1之后,通过调用getLastError来实现。

注意: ?mongo wire protocol?killCursors 操作不支持 getlasterror.? (如果你是 驱动?developers一定要注意?.)

参数

fsync


当启动mongod,并没有附加参数--dur的时候, ?fsync 参数再返回之前会强迫数据库进行同步所有文件。
当启动mongod,附加--dur的时候,fsync参数返回之前会等待下一组的提交。
> db.runCommand({getlasterror:1,fsync:true})
{ "err" : null, "n" : 0, "fsyncFiles" : 2, "ok" : 1 }

w

写操作成功复制N个服务器之前,写操作都是阻塞状态。

wtimeout?和w一起使用,指定超时时间。
> db.getLastError(2, 5000) // w=2, timeout 5000ms