1

複数のアイテムの挿入/更新にまだ問題があります。問題は、N個のアイテムのリストがあり、それぞれ(アイテム)を挿入したいということです。しかし、同じ一意のキーを持つアイテムが既に存在する場合は、代わりに更新したいと考えています。(アイテムには一意のキーが含まれています。) したがって、基本的には、1 回のラウンドトリップを使用して個々のアイテムをアップサートしたいと考えています。

もちろん、これはアイテムごとに行うこともできますが、バッチを使用してこれを行うことができればよいので、N 回の往復は必要ありません。

これを行う方法はありますか(Java)?

4

1 に答える 1

0

これが機能します:

public static BulkWriteResult upsertAll(MongoCollection<Document> coll, List<Document> docs, String keyTag) {
    List<UpdateOneModel<Document>> requests = new ArrayList<UpdateOneModel<Document>>();
    UpdateOptions opt = new UpdateOptions().upsert(true);
    for (Document doc : docs ) {
        BasicDBObject filter = new BasicDBObject(keyTag, doc.get(keyTag)); 
        BasicDBObject action = new BasicDBObject("$set", doc);
        requests.add(new UpdateOneModel<Document>(filter, action, opt));
    }
    return coll.bulkWrite(requests);
}
于 2015-05-08T17:47:51.460 に答える