在 mongo-java-driver 3.12 中使用 MongoCollection.deleteMany 中的 WriteConcern

Use WriteConcern in MongoCollection.deleteMany in mongo-java-driver 3.12

我正在使用 mongo-java-driver-3.12.X 版本。 我想更改已弃用的 API

DBCollection.remove(query, WriteConcern.UNACKNOWLEDGED);

MongoCollection.deleteMany(query)
  1. 有没有办法指定 WriteConcern?
  2. 如果未指定 WriteConcern,默认行为是什么?

您可以在 driver documentation 中轻松找到此信息。

对于 3.12 版本,WriteConcern 可以设置为多个级别,它是这样的。

MongoClient:

MongoClientOptions options = MongoClientOptions.builder().writeConcern(WriteConcern.UNACKNOWLEDGED).build();
MongoClient mongoClient = new MongoClient(Arrays.asList(
        new ServerAddress("host1", 27017),
        new ServerAddress("host1", 27018)), options);

或使用连接字符串

MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://host1:27017,host2:27017/?w=unacknowledged"));

Mongo数据库

MongoDatabase database = mongoClient.getDatabase("test").withWriteConcern(WriteConcern.UNACKNOWLEDGED);

Mongo 集合

这是您感兴趣的案例

MongoCollection<Document> collection = database.getCollection("restaurants").withWriteConcern(WriteConcern.UNACKNOWLEDGED);
collection.deleteMany(query);

请记住,MongoCollection 和 MongoDatabase 是不可变的,因此调用 withWriteConcern 会创建一个新实例,并且对原始实例没有影响。

对于默认行为,您需要检查 documentation,因为它取决于您的 mongodb 版本。