Mongodb java api:WriteResult#getN()

时间:2012-05-19 06:22:19

标签: java mongodb

我正在使用带有Java API的MongoDB编写一些Java代码,而且我不确定Javadoc的某些部分。

在多线程上下文中,我使用DBCollection.html#update(com.mongodb.DBObject, com.mongodb.DBObject)来更新唯一文档,但我看到两个线程可能会尝试并发写入。在这种情况下,我观​​察到只有一次写入,因为Mongodb似乎使用乐观的写锁定,但我想以编程方式找出写入是哪个线程的写入,哪一个不是。由于“没有更新”的行为是沉默的(我的意思是没有例外或者什么),我搜索了API以某种方式来回答我的问题,经过一些测试后发现了这个方法:WriteResult#getN()

public int getN()
    Gets the "n" field
    Returns:

描述是,哼......并不是真的详尽无遗。我的测试表明,赢得写入的线程有一个返回1的getN(),另一个返回0。

所以我的问题是:有人可以证实这一点吗?

1 个答案:

答案 0 :(得分:8)

来自GetLastError()documentation

命令的返回值是具有各种字段的对象。常见字段如下:可能还有其他领域。

  • ok - true表示getLastError命令已成功完成。这并不表示没有最后一个错误。
  • 错误 - 如果为非null,则表示发生了错误。值是错误的文本描述。
  • code - 如果设置,则表示发生的错误代码。 connectionId - 连接的ID
  • lastOp - 上一次操作的操作ID

更新:

  • n - 如果更新已完成,则这是更新的文档数。

所以在这种情况下,'get'n“field”表示获取n,即更新的文档数。如果没有将“multi”设置为true,则它只能是0或1。