Aqui está a estrutura do array
contact: {
phone: [
{
number: "+1786543589455",
place: "New Jersey",
createdAt: ""
}
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Aqui eu sei apenas o mongo id ( _id
) e o número de telefone ( +1786543589455
) e preciso remover todo o elemento correspondente da matriz do documento. ou seja, o elemento indexado zero na matriz telefônica corresponde ao número de telefone e precisa remover o elemento correspondente da matriz.
contact: {
phone: [
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Eu tentei com o seguinte método de atualização
collection.update(
{ _id: id, 'contact.phone': '+1786543589455' },
{ $unset: { 'contact.phone.$.number': '+1786543589455'} }
);
Mas ele remove number: +1786543589455
do objeto da matriz interna, não o elemento indexado zero na matriz do telefone. Tentei pull
também sem sucesso.
Como remover o elemento do array no mongodb?
{ $pull: { 'contact.phone.$': { 'contact.phone.$.number': '+1786543589455' } } }
e{ $pull: { 'contact.phone': { 'contact.phone.$.number': '+1786543589455' } } }
sem sucesso. Não entende o trabalho de operadores posicionais aqui?.update()
atualiza um único documento. Para atualizar vários documentos, use a{ multi: true }
opção Veja adb.collection.update
documentação para detalhes .Este código abaixo removerá o elemento de objeto completo da matriz, onde o número de telefone é '+1786543589455'
fonte
Em Mongoose: do documento :
Veja a resposta de Leonid Beschastny para a resposta correta.
fonte
Você pode simplesmente usar $ pull para remover um sub-documento. O operador $ pull remove de uma matriz existente todas as instâncias de um valor ou valores que correspondem a uma condição especificada.
Isso localizará o documento pai em relação ao ID fornecido e removerá o elemento do subDocument que corresponde aos critérios especificados.
Leia mais sobre pull aqui .
fonte
Se você usa a API Mongoose e procura extrair um objeto sub / filho: Leia este documento Não se esqueça de usar save () quando terminar de editar, caso contrário as alterações não serão salvas no banco de dados.
fonte