【问题标题】:Use WriteConcern in MongoCollection.deleteMany in mongo-java-driver 3.12在 mongo-java-driver 3.12 的 MongoCollection.deleteMany 中使用 WriteConcern
【发布时间】:2020-09-24 18:55:38
【问题描述】:

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

DBCollection.remove(query, WriteConcern.UNACKNOWLEDGED);

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

【问题讨论】:

    标签: java mongodb mongodb-java mongo-java-driver mongo-collection


    【解决方案1】:

    您可以在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"));
    

    蒙古数据库

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

    MongoCollection

    这是你感兴趣的案例

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

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

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

    【讨论】:

    • 理想情况下,人们会期望默认的WriteConcern 是初始化mongoClient 的东西......如果不是这样,那么驱动程序的默认值就是。我认为它的 WriteConcern.ACKNOWLEDGED 可供选择。
    • MongoCollection.withWriteConcern(WriteConcern.UNACKNOWLEDGED) 是我想要的。谢谢。
    猜你喜欢
    • 2019-03-17
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多