Java - 使用 MongoDB 集合批量写入插入/更新

Shi*_*kar 2 mongodb mongo-java spring-data-mongodb mongo-java-driver

我对 MongoDB 很陌生。尝试了解在 MongoDB 中执行批量写入的最佳选项。我想定期刷新我的应用程序集合。文档的键是 AppID、AppName 和 AppStatus。以下是我想在每次运行中执行的操作 -

  1. 在应用程序集合中找到AppID。
  2. 如果不存在则执行插入
  3. 如果存在,则仅更新 AppStatus 键的值。
List<Application> applist = getAppList(); // List contains All the Application

private final MongoClient mongoClient;

private final MongoTemplate mongoTemplate;

MongoCollection<Document> collection =
                  mongoTemplate.getDb().getCollection("Application");
collection.bulkWrite (????);
Run Code Online (Sandbox Code Playgroud)

如何循环 appList 并执行批量插入/更新?

Har*_*hit 6

您可以org.springframework.data.mongodb.core.BulkOperations用来执行批量更新/插入/更新插入/删除操作。

List<Application> applist = getAppList();

List<Pair<Query, Update>> updates = new ArrayList<>(applist.size());
applist.forEach(application -> {
    Query query = Query.query(Criteria.where("AppID").is(application.getAppID()));

    Update update = new Update();
    update.set("AppID", application.getAppID());
    update.set("AppName", application.getAppName());
    update.set("AppStatus", application.getAppStatus());

    updates.add(Pair.of(query, update));
});

BulkOperations bulkOperations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "Application");
bulkOperations.upsert(updates);
bulkOperations.execute();
Run Code Online (Sandbox Code Playgroud)