MongoDB:cómo eliminar un objeto de un documento en una matriz anidada
-
23-12-2019 - |
Pregunta
Mi doc es como este
"page_elements" : [
{
"type" : "gallery",
"words" : [
"gallery",
"photos"
]
},
{
"type" : "cart",
"words" : [
"cart",
"shop"
]
},
{
"type" : "Privacy",
"words" : [
"privacy",
"policy",
"privacy policy"
]
},
{
"type" : "cart",
"words" : [
"cart",
"shopping cart",
"buy now",
"add to cart",
"add to basket"
]
}
por error, he actualizado carro dos veces.ahora, tengo que quitar el primer carrito de la compra en la matriz y mantener el resto del documento.
Aquí, debo eliminar
{
"type" : "cart",
"words" : [
"cart",
"shop"
]
}
He intentado esto..
db.ds_master_language_words.remove( { "page_elements.type" : "cart" } )
Solución
No quieres eliminar, quieres actualizar. $ unset se deshará del campo y conoce la posición:
db.ds_master_language_words.update(
{ <your_document_id_match > },
{ $unset: { "page_elements.1": ""}}
)
que se ajustará a null en la matriz, pero ahora es fácil de quitar con $ Pull :
db.ds_master_language_words.update(
{ <your_document_id_match > },
{ $pull: { "page_elements": null }}
)
También vea la documentación para el método update
http://docs.mongodb.org/manual/reference/method/db.collection.update/
Otros consejos
Usted puede hacer esto con $pull
dándole un page_elements
valor que coincide con el elemento de la matriz a quitar:
db.ds_master_language_words.update({}, {
$pull: {page_elements: {
"type": "cart",
"words": ["cart", "shop"]
}}})
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow