Aquí está la estructura de la matriz
contact: {
phone: [
{
number: "+1786543589455",
place: "New Jersey",
createdAt: ""
}
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Aquí solo conozco la identificación de mongo ( _id
) y el número de teléfono ( +1786543589455
) y necesito eliminar todo el elemento de matriz correspondiente del documento. es decir, el elemento indexado cero en la matriz del teléfono coincide con el número de teléfono y necesita eliminar el elemento de la matriz correspondiente.
contact: {
phone: [
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Intenté con el siguiente método de actualización
collection.update(
{ _id: id, 'contact.phone': '+1786543589455' },
{ $unset: { 'contact.phone.$.number': '+1786543589455'} }
);
Pero elimina number: +1786543589455
del objeto de matriz interna, no un elemento indexado a cero en la matriz del teléfono. Probado con pull
también sin éxito.
¿Cómo eliminar el elemento de matriz en mongodb?
{ $pull: { 'contact.phone.$': { 'contact.phone.$.number': '+1786543589455' } } }
y{ $pull: { 'contact.phone': { 'contact.phone.$.number': '+1786543589455' } } }
sin éxito. ¿No entiende el funcionamiento de los operadores posicionales aquí?.update()
actualiza un solo documento. Para actualizar varios documentos, use la{ multi: true }
opción. Verdb.collection.update
documentos para más detalles .El siguiente código eliminará el elemento objeto completo de la matriz, donde el número de teléfono es '+1786543589455'
fuente
En Mangosta: del documento :
Ver la respuesta de Leonid Beschastny para la respuesta correcta.
fuente
Simplemente puede usar $ pull para eliminar un subdocumento. El operador $ pull elimina de una matriz existente todas las instancias de un valor o valores que coinciden con una condición especificada.
Esto encontrará su documento padre contra la ID dada y luego eliminará el elemento de subDocument que coincide con los criterios dados.
Lea más sobre pull aquí .
fuente
Si usa la API de Mongoose y busca extraer un objeto secundario / secundario: lea este documento No olvide usar save () cuando termine de editar; de lo contrario, los cambios no se guardarán en la base de datos.
fuente