gpt4 book ai didi

MongoDB:WriteResult.getN() 总是返回 0?

转载 作者:IT老高 更新时间:2023-10-28 13:13:35 25 4
gpt4 key购买 nike

根据javaDoc , MongoDB-java 中WriteResult 类的getN() 方法返回操作中更新的文档数。但它总是返回零,即使文档插入正确。

为什么会这样?还是我理解错了?

最佳答案

我的印象是这是正常的 MongoDB 行为,与 Java 驱动程序无关。

我在文档中唯一能找到的是 this :

getLastError.n reports the number of documents updated or removed, if the preceding operation was an update or remove operation.

insert 既不是 update 也不是 remove,似乎没有指定 n 并且0 与任何默认值一样好。您可以在 mongo shell 中轻松检查它:

> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }

除非我弄错了,否则这并不是真正的问题:问问自己在什么情况下插入会失败(比如连接失败)。我能想到的唯一一个是违反唯一性约束,这将导致异常。所以几乎按照定义,您收到一个 WriteResult 实例的事实完全意味着操作成功并且插入了一个文档。

几点说明:

  • 我之前的论点取决于您的 WriteConcern 是否足够高以报告错误。例如,如果您使用 WriteConcern.NONE,则不会引发任何异常。
  • 如果更新文档的数量对您来说是绝对必要的,您可以始终使用 save 而不是 insert。不是很干净,但它的行为符合您的预期。

关于MongoDB:WriteResult.getN() 总是返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com