Oto struktura tablicy
contact: {
phone: [
{
number: "+1786543589455",
place: "New Jersey",
createdAt: ""
}
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Tutaj znam tylko identyfikator mongo ( _id
) i numer telefonu ( +1786543589455
) i muszę usunąć cały odpowiedni element tablicy z dokumentu. tzn. element indeksowany przez zero w tablicy phone jest dopasowywany do numeru telefonu i trzeba usunąć odpowiedni element tablicy.
contact: {
phone: [
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Próbowałem z następującą metodą aktualizacji
collection.update(
{ _id: id, 'contact.phone': '+1786543589455' },
{ $unset: { 'contact.phone.$.number': '+1786543589455'} }
);
Ale usuwa number: +1786543589455
z wewnętrznej tablicy obiekt, a nie element indeksowany przez zero w tablicy phone. Próbowałem pull
też bez powodzenia.
Jak usunąć element tablicy w mongodb?
{ $pull: { 'contact.phone.$': { 'contact.phone.$.number': '+1786543589455' } } }
i{ $pull: { 'contact.phone': { 'contact.phone.$.number': '+1786543589455' } } }
bez niego. Nie rozumiesz tutaj działania operatorów pozycyjnych?.update()
aktualizuje pojedynczy dokument. Aby zaktualizować wiele dokumentów, użyj{ multi: true }
opcji. Zobaczdb.collection.update
dokumentację, aby uzyskać szczegółowe informacje .Poniższy kod usunie cały element obiektu z tablicy, gdzie numer telefonu to „+1786543589455”
źródło
W Mongoose: z dokumentu :
Zobacz odpowiedź Leonida Beschastnego, aby uzyskać poprawną odpowiedź.
źródło
Możesz po prostu użyć $ pull, aby usunąć dokument podrzędny. Operator $ pull usuwa z istniejącej tablicy wszystkie wystąpienia wartości lub wartości, które pasują do określonego warunku.
Spowoduje to wyszukanie Twojego dokumentu nadrzędnego na podstawie podanego ID, a następnie usunie element z podDokumentu, który spełnia podane kryteria.
Przeczytaj więcej o ciągnięciu tutaj .
źródło
Jeśli używasz interfejsu API Mongoose i chcesz pobrać obiekt podrzędny / podrzędny: Przeczytaj ten dokument Nie zapomnij użyć funkcji save () po zakończeniu edycji, w przeciwnym razie zmiany nie zostaną zapisane w bazie danych.
źródło