我需要一些帮助来阐明WriteConcern的概念 我正在使用MongoDb 4.0.2(带有副本集)和java-mongo-driver 3.8.1
我已经在mongo配置上添加了最后一个默认的写关注点
{
"w": "majority",
"wtimeout": 5000
}
在代码端,何时可以使用数据库的ack响应?
我发现该库在您使用删除或更新时,返回一个Result对象(作为DeleteResult),该对象包含一个函数wasAcknowledged()
,用于获取集合中多数副本上的delete / update结果。
但是我无法为所有插入函数找到类似的结果。有人可以向我解释如何使用WriteConcern以避免数据丢失?
我的目标是在对副本集进行插入/写入/更新错误时捕获异常
希望问题明确,我在等待您的答复。谢谢
只需知道,是否已经在db上设置了此首选项,或者我还必须在我的代码上设置写关注首选项?
答案 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);