es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede eliminar el objeto incrustado del array en Spring Boot MongoDB.

Tengo una colección “usuarios”, que contiene el campo “carritos” que es un arreglo de objetos. Algo así:

{
    _id: '61249cb6709f5f61ec6d8372',
    name: 'ABC',
    carts: [
        {
            cartId: 'cartId-1',
            name: 'test'
        },
        {
            cartId: 'cartId-2',
            name: 'test2'
        }
    ]
}

Ahora quiero eliminar el objeto que contiene “cartId: ‘cartId-1′”. Lo he intentado así:

mongoTemplate.updateMulti(
    Query.query(Criteria.where("id").is("61249cb6709f5f61ec6d8372")),
    new Update().pull("carts", new BasicDBObject("cartId", "cartId-1")),
    Users.class
);

Pero aún así no elimina el objeto anidado del arreglo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar un objeto que contenga “cartId”:’cartId-1′ del campo “carts” en un documento de MongoDB, puede usar el operador $pull en una operación de actualización de MongoDB. Aquí hay un ejemplo que utiliza el controlador de Java y spring-data-mongodb:

    Query query = new Query(Criteria.where("_id").is("61249cb6709f5f61ec6d8372"));
    Update update = new Update().pull("carts", new BasicDBObject("cartId", "cartId-1"));
    mongoTemplate.updateFirst(query, update, User.class);
    

    Esto ejecutará una operación de actualización que elimina el primer elemento en la matriz “carts” que tiene un campo “cartId” con un valor de “cartId-1”. Tenga en cuenta que estamos usando updateFirst en lugar de updateMulti para asegurarnos de que solo actualizamos un documento.

    Asegúrese de que su clase de usuario tenga un campo llamado carts que sea una lista de objetos que contienen un campo llamado cartId. Aquí hay un ejemplo:

    “`java
    public class User {
    @Id
    private String id;

    private String name;
    
    private List<cart> carts;
    
    // getters and setters
    

    }

    public class Cart {
    private String cartId;
    private String name;

    // getters and setters
    

    }
    “`

Comments are closed.