我正在尝试使用MongoDB Java驱动程序执行对db.collection.insert(List<DBObject>, WriteConcern)方法的阻塞调用。不管我在WriteConcern中使用什么:SAFEFSYNC_SAFEFSYNCEDACKNOWLEDGED,...我不能授予已执行写入操作……至少不是我现在的操作方式。检查代码:

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

从我读过的hereFSYNC_SAFE,应该是要走的路...正在写入数据,但对result.getN()的调用始终为零。如果无法检查写入是否已完成...

为什么要首先创建getN()方法?有什么想法我做错了吗?我确实需要检查此插入操作是否已执行。我可以查询集合并进行检查,但是对我来说似乎有点过头了...

谢谢!

最佳答案

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

我不是专家,但可以考虑使用MongoDB Wiki上关于getLastError方法的引用:

实际上,您应该使用像WriteConcern.ACKNOWLEDGED这样的写关注点,而不是手动调用getLastError()

据我了解,使用足够级别的WriteConcern并取回WriteResult意味着该操作成功并且没有发生错误。还要在Wiki中的WriteConcern上查看articlereference

由于您明确希望验证插入操作是否正确执行,因此可以执行以下操作:

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 - 为什么在MongoDB Java驱动程序中忽略WriteConcern?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20653627/

10-09 01:22