私はコレクションに挿入したいオブジェクトのリストを持っています。 mongoTemplate.insert(list);
はうまくいきましたが、コレクションに既に挿入されている重複したオブジェクトをリストに含めることができるように、upsert();
に変更します。だから、私が望むのは、リスト全体を挿入し、アイテムがすでにコレクションに存在するかどうかをチェックし、それを挿入しないようにすることです。Spring MongoTemplate upsert list全体
0
A
答えて
0
あなたはこのようcontinueOnError
またはordered
フラグを試してみることができます:
db.collection.insert(myArray, {continueOnError: true})
OR、
db.collection.insert(myArray, {ordered: false})
0
一意の制約が存在しない場合は、あなたのオブジェクトのid
(のunique
インデックスフィールドを作成する必要があります)。そのため、同じid
を使用して挿入しようとするとエラーが発生します。一意性制約を使用
あなたはエラーがエラーの場合に見出されるたびに、オブジェクトの既存のid
を挿入しながらためのユニークな制約の挿入を継続することができるフラグcontinueOnError: true
を設定することができるinsert
を使用するためarray
又はBulkInsert
を使用して挿入します。
0
バルクアップサート操作を行うための唯一の方法は、メソッドMongoCollection.bulkWrite
ある(あるいは少なくとも、私が知っている唯一の方法... ;-))
それを使用するには、あなたがにあなたの文書を変換する必要があります適切なWriteModel
:文書単位でのアップカウントの場合、これはUpdateOneModel
です。
List<Document> toUpdate = ...;
MongoCollection coll = ...;
// Convert Document to UpdateOneModel<Document>
List<UpdateOneModel<Document>> bulkOperationList = toUpdate.stream()
.map(doc -> new UpdateOneModel<Document>(
Filters.eq("_id", doc.get("_id")), // identify by same _id
doc,
new UpdateOptions().upsert(true)))
.collect(Collectors.toList());
// Write to DB
coll.bulkWrite(bulkOperationList);
(免責事項:私はがにこのコードを入力、私はそれを走ったことがない)
私は私のmongoクライアント上で作成した一意のインデックスを持っています。 –
だから、ちょうど挿入するフラグに従ってください! – Zico
'mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED、MyClass.class); mongoTemplate.insert(list); '私はこれを試しましたが動作しません。 –