日期:2014-05-16 浏览次数:20396 次
当写入数据库,MongoDB默认的情况下不会响应结果。但是MongoDB提供了命令来保证这些操作是成功的。
当在safe的模式下保存和更新数据库,一些驱动就会自动调用这些命令。我们这详细讲解getlasterror是如何运行的。
getlasterrorgetlasterror是验证最后一次连接数据库操作。可以通过以下几种方式来进行调用: > 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
|
|