10

我正在使用带有 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 和另一个 0 的 getN()。

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

4

1 回答 1

8

来自 GetLastError()文档

命令的返回值是一个具有各种字段的对象。下面列出了常用字段;可能还有其他领域。

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

对于更新:

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

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

于 2012-05-19T22:26:37.990 回答