Вот структура массива
contact: {
phone: [
{
number: "+1786543589455",
place: "New Jersey",
createdAt: ""
}
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Здесь я знаю только mongo id ( _id
) и номер телефона ( +1786543589455
), и мне нужно удалить весь соответствующий элемент массива из документа. т.е. элемент с нулевым индексом в массиве телефонов совпадает с номером телефона, и необходимо удалить соответствующий элемент массива.
contact: {
phone: [
{
number: "+1986543589455",
place: "Houston",
createdAt: ""
}
]
}
Я пробовал использовать следующий метод обновления
collection.update(
{ _id: id, 'contact.phone': '+1786543589455' },
{ $unset: { 'contact.phone.$.number': '+1786543589455'} }
);
Но он удаляет number: +1786543589455
из внутреннего массива объект, а не нулевой индексированный элемент в массиве телефона. Пробовал pull
тоже безуспешно.
Как удалить элемент массива в mongodb?
{ $pull: { 'contact.phone.$': { 'contact.phone.$.number': '+1786543589455' } } }
и{ $pull: { 'contact.phone': { 'contact.phone.$.number': '+1786543589455' } } }
безуспешно. Не понимает здесь работы позиционных операторов?.update()
обновляет один документ. Для обновления нескольких документов используйте{ multi: true }
опцию. Подробности см. Вdb.collection.update
документации .Приведенный ниже код удалит весь элемент объекта из массива, где номер телефона - «+1786543589455».
источник
В Mongoose: из документа :
Правильный ответ см. В ответе Леонида Бесчастного.
источник
Вы можете просто использовать $ pull для удаления вложенного документа. Оператор $ pull удаляет из существующего массива все экземпляры значения или значений, которые соответствуют указанному условию.
Это найдет ваш родительский документ по заданному идентификатору, а затем удалит элемент из вложенного документа, который соответствует заданным критериям.
Подробнее о вытягивании читайте здесь .
источник
Если вы используете API Mongoose и хотите получить подчиненный / дочерний объект: Прочтите этот документ Не забудьте использовать save (), когда закончите редактирование, иначе изменения не будут сохранены в базе данных.
источник