Remove an object within a mongodb array

Asked

Viewed 979 times

0

I have the following document inside a Collection in mongodb:

{
    "_id" : ObjectId("5988efbb742568478c6a086f"),
    "cliente" : "[email protected]",
    "lista_compras" : [ 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978a"),
            "produto" : "Banana prata cultivada no sul de Angola 100gr",
            "preco" : 689,
            "imagem" : "../../images/produtos/candando/banana.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978b"),
            "produto" : "Atum amiga de óleo vegetal",
            "preco" : 120450,
            "imagem" : "../../images/produtos/candando/atum.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978a"),
            "produto" : "Banana prata cultivada no sul de Angola 100gr",
            "preco" : 689,
            "imagem" : "../../images/produtos/candando/banana.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978a"),
            "produto" : "Banana prata cultivada no sul de Angola 100gr",
            "preco" : 689,
            "imagem" : "../../images/produtos/candando/banana.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978a"),
            "produto" : "Banana prata cultivada no sul de Angola 100gr",
            "preco" : 689,
            "imagem" : "../../images/produtos/candando/banana.jpg"
        }
    ]
}

I intend to remove one object at a time. I use the following command:

db.carrinhos.update(
    {cliente: "[email protected]"},
    {$pull: {lista_compras: { id_produto: ObjectId("5983bb21834000b1b8e7978f") }}}
)

It happens to erase all objects with the id specified. There is a way for me to delete one at a time?

  • I decided to add a key value to each document inside the array and was eliminating based on it.

  • Tip: Add your comment as a reply and mark as accepted! so your question gets answered and helps those who are looking for an answer.

2 answers

0

This is a question that broke my head too, plus the solution as always is simple, rs, search throughout the document the name of your array and delete the corresponding Id of the document

     db.getCollection('compras').update({}, {
        $pull: { "lista_compras": { 
        "_id": ObjectId("5983bb21834000b1b8e7978a"))
         }}})

0


I decided to add a key value to each document within the array and was eliminating based on it. Before I had my structure like this:

{
    "_id" : ObjectId("5988efbb742568478c6a086f"),
    "cliente" : "[email protected]",
    "lista_compras" : [ 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }, 
        {
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }
}

And now I have so: (added the key field id_produto_carrinho

{
    "_id" : ObjectId("5988efbb742568478c6a086f"),
    "cliente" : "[email protected]",
    "lista_compras" : [ 
        {
            "id_produto_carrinho" : ObjectId("598f02b2cc8bc4427823f0ee"),
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }, 
        {
            "id_produto_carrinho" : ObjectId("598f02b2cc8bc4427823f0ef"),
            "id_produto" : ObjectId("5983bb21834000b1b8e7978f"),
            "produto" : "Leite Nido em Lata 87 copos",
            "preco" : 5250,
            "imagem" : "../../images/produtos/candando/nido.jpg"
        }
}

When I want to delete or edit, I do it based on the key field I added to each array.

  • 1

    Celio and how did you do it? Could you add the code? It will be clearer your answer.

  • 1

    @Marconi, made.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.