Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

296
Vistas
Spring mongodb agrega o actualiza una lista de documentos

Tengo una lista de registros como

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

Ahora, según si una entrada ya existe o no en la base de datos, debe actualizar o insertar el documento. También para la actualización existe la condición de que el valor del campo de user existente debe coincidir con el valor proporcionado para user en el documento.

Por supuesto que puedo ejecutar la lista en un bucle y usar

 mongoOperations.save(...);

Pero si tengo una lista enorme, tendré que hacer una operación de db por cada entrada, lo que no creo que sea eficiente. ¿Hay alguna otra forma eficiente de realizar esta operación?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si está utilizando el repositorio CRUD, el repositorio CRUD proporciona el método save () que se puede usar para la entidad única (mongoCollection) o puede usar el método de guardado sobrecargado

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

que puede tomar Arraylist y guardar el objeto arraylist. No es necesario utilizar los bucles.

Puede ver el siguiente ejemplo en el que la clase InventoryService crea 3 objetos de inventario y agrega todo en ArrayList y finalmente pasa esto al repositorio de inventario, que es un repositorio CRUD.

 @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.saveAll(inventoryList); } catch (Exception e) { e.printStackTrace(); } } }

Repositorio Mongo de muestra

 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 }

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

about 4 years ago · Santiago Trujillo Denunciar

0

Puede usar mongoTemplate.updateMulti() para actualizar la lista de registros como se muestra a continuación

 Query query = new Query(); query.addCriteria(Criteria.where("filteringField").is("filteringFieldValue)); Update update = new Update(); update.set("fieldToBeUpdated", "fieldToBeUpdatedValue"); mongoTemplate.updateMulti(query, update, YourClass.class);
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda