Ich habe eine Liste von Objekten, die ich in eine Sammlung einfügen möchte. Die mongoTemplate.insert(list);
funktioniert gut, aber jetzt möchte ich es zu upsert();
ändern, da meine Liste doppelte Objekte enthalten kann, die bereits in einer Sammlung eingefügt sind. Also, was ich will, ist die gesamte Liste einzufügen und unterwegs zu überprüfen, ob das Objekt bereits in der Sammlung vorhanden ist, dann überspringen Sie es sonst einfügen Sie es.Spring MongoTemplate vollständige Liste nach oben
Antwort
können Sie versuchen, continueOnError
oder ordered
Flag wie folgt aus:
db.collection.insert(myArray, {continueOnError: true})
OR,
db.collection.insert(myArray, {ordered: false})
Sie benötigen einen unique
Indexfeld des Objekts id
erstellen (wenn es keine eindeutige Einschränkung). So dass es Fehler macht, während Sie versuchen, unter Verwendung derselben id
einzufügen.
Verwenden die eindeutige Einschränkung Sie array
einfügen oder mit BulkInsert
Für insert
indem man einen Flag gesetzt continueOnError: true
kann die Insertion weiterhin kann, wenn Fehler aufgrund eindeutiger Einschränkung im Fehlerfall festgestellt, während bestehenden id
des Objekts einzufügen.
Der einzige Weg, um einen Bulk-Upsert Betrieb zu tun, ist das Verfahren MongoCollection.bulkWrite
(oder zumindest: der einzige Weg, ich weiß ... ;-))
es nutzen zu können, müssen Sie Ihre Dokumente konvertieren das entsprechende WriteModel
: für upsert auf einer pro-Dokument-Basis ist dies 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);
(Haftungsausschluss: Ich habe nur getippt diesen Code, habe ich nie lief es)
- 1. Spring Mongotemplate Query Ergebnis mit SubDocuments
- 2. Spring MongoTemplate das gesamte Objekt hochsetzen
- 3. Spring MongoTemplate einfügen Erfolg oder fehlgeschlagen
- 4. Mongo String-Abfrage zu MongoTemplate (java, spring)
- 5. Frühling Stiefel mit MongoTemplate
- 6. Java Spring, finde mit MongoTemplate und generischen Typ
- 7. Kann MongoTemplate automatische Übersetzung liefern?
- 8. am Ende der Liste nach oben scrollen
- 9. Liste nach oben über anderen Inhalt erweitern
- 10. AutoCompleteTextField-Liste scrollt nicht immer nach oben?
- 11. @DataMongoTest erstellt eine Null MongoTemplate
- 12. SpringData und MongoDB Konfigurationsfehler: MongoTemplate
- 13. Komplexe Abfragen mit MongoTemplate und Spring Data MongoDB
- 14. Paginierung mit mongoTemplate
- 15. MongoTemplate einfügen Status
- 16. Vollständige Liste der Bulma-Klassen
- 17. Vollständige Liste der AngularJS-Richtlinien?
- 18. Backbone.js DOM-Ereignisse vollständige Liste
- 19. make os.listdir() Liste vollständige Pfade
- 20. ein Objekt in eine Liste einfügen MongoTemplate mit
- 21. Frühling MongoTemplate - Mapping Aggregation Ergebnis Sammlungen (z Liste und Karte)
- 22. Nach oben scrollen
- 23. Nach oben Navigation mit RecycleView
- 24. Eine vollständige Liste aller Android-Geräte
- 25. CSS oben, dann scrollen Sie nach oben
- 26. Vollständige Liste der iOS App-Berechtigungen
- 27. Zeigt Z nach oben oder zeigt Y nach oben?
- 28. Verschieben von Listenelementen nach Überprüfung nach oben
- 29. MongoTemplate in MultiTenant Feder Daten Mongo Anwendung
- 30. hinzufügen Elemente nach oben Liste, wenn Elementinhalt hat
Ich habe einen eindeutigen Index für mein Mongo-Client erstellt. –
Ok. Also folge einfach der Flagge zum Einfügen! – Zico
'mongoTemplate.bulkOps (BulkOperations.BulkMode.UNORDERED, MyClass.class); mongoTemplate.insert (list); 'Ich habe das versucht, funktioniert aber nicht. –