나는 컬렉션에 삽입하려는 개체 목록이 있습니다. mongoTemplate.insert(list);
잘 작동하지만 지금은 upsert();
으로 수정하고 싶습니다. 내 목록에는 이미 컬렉션에 삽입 된 복제 개체가 포함될 수 있습니다. 그래서 내가 원하는 것은 전체 목록을 삽입하고 이동 중에는 항목이 컬렉션에 이미 있는지 확인한 다음 삽입하지 않으면됩니다.봄 MongoTemplate 전체 목록을 upsert
0
A
답변
0
이 같은 continueOnError
또는 ordered
플래그를 시도 할 수 있습니다 :
db.collection.insert(myArray, {continueOnError: true})
OR,
db.collection.insert(myArray, {ordered: false})
0
을 당신의 unique
인덱스 필드를 만들 필요가 개체의 id
(어떤 고유 제한 조건이없는 경우). 동일한 id
을 사용하여 삽입하려고하면 오류가 발생합니다.
당신이 array
삽입 고유 제한 조건을 사용하거나 개체의 id
기존 삽입하는 동안 오류가 있기 때문에 고유 제한 조건의 오류가 발생하는 경우에 발견 할 때마다 삽입을 계속할 수있는 플래그 continueOnError: true
을 설정할 수 있습니다 insert
을 사용하기 위해 BulkInsert
를 사용하여.
0
대량-upsert 작업을 할 수있는 유일한 방법은 방법 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);
: 내 몽고 클라이언트에서 생성 된 고유 인덱스를
(면책 조항 난 단지 내가를 실행하지 ,이 코드를 입력). –
확인. 그런 다음 깃발을 따라 삽입하면됩니다. – Zico
'mongoTemplate.bulkOps (BulkOperations.BulkMode.UNORDERED, MyClass.class); mongoTemplate.insert (list);'시도했지만 작동하지 않았습니다. –