MongoDB,WriteConcern:需要澄清

时间:2019-01-25 10:16:10

标签: java mongodb

我需要一些帮助来阐明WriteConcern的概念 我正在使用MongoDb 4.0.2(带有副本集)和java-mongo-driver 3.8.1

我已经在mongo配置上添加了最后一个默认的写关注点

{
    "w": "majority",
    "wtimeout": 5000
}

在代码端,何时可以使用数据库的ack响应? 我发现该库在您使用删除或更新时,返回一个Result对象(作为DeleteResult),该对象包含一个函数wasAcknowledged(),用于获取集合中多数副本上的delete / update结果。

但是我无法为所有插入函数找到类似的结果。有人可以向我解释如何使用WriteConcern以避免数据丢失?

我的目标是在对副本集进行插入/写入/更新错误时捕获异常

希望问题明确,我在等待您的答复。谢谢

只需知道,是否已经在db上设置了此首选项,或者我还必须在我的代码上设置写关注首选项?

1 个答案:

答案 0 :(得分:2)

您可以抓住MongoWriteConcernException。以下是insertOne的源代码和注释。

/**
 * Inserts the provided document. If the document is missing an identifier, the driver should generate one.
 *
 * <p>Note: Supports retryable writes on MongoDB server versions 3.6 or higher when the retryWrites setting is enabled.</p>
 * @param document the document to insert
 * @throws com.mongodb.MongoWriteException        if the write failed due some other failure specific to the insert command
 * @throws com.mongodb.MongoWriteConcernException if the write failed due being unable to fulfil the write concern
 * @throws com.mongodb.MongoException             if the write failed due some other failure
 */
void insertOne(TDocument document);