首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB: WriteResult.getN()总是返回0?

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

Stack Overflow用户
提问于 2013-02-15 19:49:14
回答 3查看 10.3K关注 0票数 12

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-06 22:19:38

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

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

如果前面的操作是update或remove操作,

getLastError.n会报告更新或删除的文档数量。

insert既不是update,也不是remove,似乎没有指定n,0和any一样是默认值。您可以在mongo shell中很容易地检查它:

代码语言:javascript
复制
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }

除非我错了,否则这并不是真正的问题:问问自己在什么情况下插入会失败(除了连接失败)。我唯一能想到的就是违反单一性约束,这将导致异常。因此,几乎根据定义,接收到WriteResult实例就意味着操作成功并插入了文档。

以下是几个注意事项:

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

Stack Overflow用户

发布于 2015-01-16 02:38:40

请注意,无论MongoDB documentation的状态如何,对于使用Java驱动程序的insert,WriteResult.getN()方法始终返回0,无论插入的对象数量是多少。设置Java驱动2.12.3中n字段的源码:

代码语言:javascript
复制
if (type == INSERT) {
  commandResult.put("n", 0);
} else if (type == REMOVE) {
  commandResult.put("n", bulkWriteResult.getRemovedCount());
} else if (type == UPDATE || type == REPLACE) {
  commandResult.put("n", bulkWriteResult.getMatchedCount() + bulkWriteResult.getUpserts().size());
  if (bulkWriteResult.getMatchedCount() > 0) {
    commandResult.put("updatedExisting", true);
  } else {
    commandResult.put("updatedExisting", false);
  }
  if (!bulkWriteResult.getUpserts().isEmpty()) {
    commandResult.put("upserted", bulkWriteResult.getUpserts().get(0).getId());
  }
}

但是通过异常可以正确地报告错误。例如,如果指定的WriteConcern至少是已确认的,则插入违反唯一索引的文档时将引发MongoException

票数 5
EN

Stack Overflow用户

发布于 2013-09-06 21:15:34

您可能还想检查http://docs.mongodb.org/manual/core/write-concern/

dafault行为不是使用“安全”的写入关注点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14894101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档