Mongodb java api:WriteResult#getN()

Nic*_*ube 10 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:
Run Code Online (Sandbox Code Playgroud)

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

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

Asy*_*sky 8

来自GetLastError()文档

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

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

有关更新:

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

因此,在这种情况下,"获取"n"字段"表示获取n,即更新的文档数.如果没有将"multi"设置为true,则它只能是0或1.