2

Ich habe eine Liste von Datensätzen wieFrühling mongodb hinzufügen oder eine Liste von Dokumenten aktualisieren

[ 
    {"id":"1", "name":"a", "user":"u1"}, 
    {"id":"2", "name":"b", "user":"u1"}, 
    {"id":"3", "name":"c", "user":"u1"} 
] 

nun basierend auf, wenn bereits ein Eintrag in der Datenbank vorhanden ist oder nicht, sollte es entweder aktualisieren oder das Dokument einzufügen. Für die Aktualisierung gibt es auch eine Bedingung, dass der Wert des vorhandenen Felds user mit dem im Dokument angegebenen Wert für user übereinstimmen sollte.

Natürlich kann ich die Liste in einer Schleife laufen und

mongoOperations.save(...); 

verwenden, aber wenn ich eine riesige Liste habe, dann werde ich für jeden Eintrag einer db Operation tun, was ich nicht glaube, effizient . Gibt es eine andere effiziente Möglichkeit, diese Operation durchzuführen?

Antwort

2

Wenn Sie die CRUD-Repository verwenden, dann stellt die CRUD Repository speichern() -Methode, die für die Einheit verwendet werden können (mongoCollection) oder Sie können die Speichermethode überlastet verwenden

<S extends T> List<S> save(Iterable<S> entites) 

, die nehmen die Arraylist und speichert Arraylist-Objekt. Keine Notwendigkeit, die Schleifen zu verwenden.

Sie können das folgende Beispiel sehen, in dem die InventoryService-Klasse 3 Inventory-Objekte erstellt und alle in ArrayList hinzufügt und schließlich an das Inventar-Repository, das ein CRUD-Repository ist, übergeben.

@Service 
public class InventoryService { 

    private static final Logger LOGGER = LoggerFactory.getLogger(InventoryService.class); 

    @Autowired 
    private InventoryRepository inventoryRepository; 

    public void aveInventoryDetails() { 

     List<Inventory> inventoryList = new ArrayList<Inventory>(); 

     inventoryList.add(new Inventory("500", 10)); 
     inventoryList.add(new Inventory("600", 20)); 
     inventoryList.add(new Inventory("700", 30)); 

     try { 
      inventoryRepository.save(inventoryList); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Beispiel Mongo Repository

package com.bjs.repository; 

import org.springframework.cache.annotation.Cacheable; 
import org.springframework.data.mongodb.repository.MongoRepository; 

import com.bjs.model.Inventory; 

public interface InventoryRepository extends MongoRepository<Inventory, String> { 

// empty as not defining any new method , we can use the existing save method 

} 

Als Referenz - http://docs.spring.io/autorepo/docs/spring-data-commons/1.9.1.RELEASE/api/org/springframework/data/repository/CrudRepository.html#save-java.lang.Iterable-

Verwandte Themen