gpt4 book ai didi

java - 为什么 WriteConcern 在 MongoDB Java 驱动程序中被忽略?

转载 作者:可可西里 更新时间:2023-11-01 09:31:36 24 4
gpt4 key购买 nike

我正在尝试对 db.collection.insert(List<DBObject>, WriteConcern) 执行阻塞调用方法与 MongoDB java 驱动程序。无论我在 WriteConcern 中使用什么:SAFE , FSYNC_SAFE , FSYNCED , ACKNOWLEDGED , ...我不能承认已经执行了写入...至少不是我现在正在做的方式。检查代码:

WriteResult result = collection.insert(list, WriteConcern.FSYNC_SAFE);
if (result.getN()> 0){
System.out.println("Alleluyah!");
return true;
}

从我读到的here , FSYNC_SAFE , 应该是要走的路...正在写入数据,但是调用 result.getN()始终为零。如果没有办法检查写入是否已经完成...

为什么要创建 getN()首先是方法??知道我做错了什么吗?我确实需要检查此插入是否已执行。我可以查询集合并进行检查,但它对我来说太过分了...

谢谢!

最佳答案

查看this关于 getN() 方法的帖子。它仅提供有关受更新或删除操作影响的文档数量的信息。

我不是专家,但考虑一下 MongoDB wiki 中关于 getLastError 方法的引述:

You should actually use a write concern like WriteConcern.ACKNOWLEDGED instead of calling getLastError() manually.

据我所知,使用足够级别的 WriteConcern 并返回 WriteResult 意味着操作成功并且没有发生错误。查看articlereference在 wiki 中的 WriteConcern 上也是如此。

由于您明确想要验证插入操作是否正确执行,您可以这样做:

WriteResult result = collection.insert(list, WriteConcern.FSYNC_SAFE);
CommanResult commandResult = result.getLastError();
if (commandResult.get("err") != null) {
System.out.println("Alleluyah");
return true;
}

使用 WriteConcern.FSYNC_SAFE 插入文档会调用 getLastError() 方法 - source .如果 WriteConcern 的级别不够严格,调用 getLastError() 可能会导致错误 - 检查 WriteResult code on github .如果没有发生错误,则 err 字段将为 null,否则它将包含一条错误消息 - source .

关于java - 为什么 WriteConcern 在 MongoDB Java 驱动程序中被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653627/

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