我正在使用带有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。
所以我的问题是:有人可以证实这一点吗?
答案 0 :(得分:8)
来自GetLastError()documentation
命令的返回值是具有各种字段的对象。常见字段如下:可能还有其他领域。
更新:
所以在这种情况下,'get'n“field”表示获取n,即更新的文档数。如果没有将“multi”设置为true,则它只能是0或1。