Согласно документации mongoose метод удаления операция удаления выполняется только при прохождении обратного вызова. Для принудительного выполнения без обратного вызова необходимо сначала вызвать remove()
, а затем выполнить его с помощью метода exec()
.
Поскольку вы пытаетесь удалить из массива объектов, лучше использовать оператор pull. Вам не нужно искать и удалять, вы можете просто использовать метод обновления.
В соответствии с документацией оператора $ pull вы можете указать либо значение, либо условие
т.е.
{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
В вашем сценарии вам нужно либо указать полное значение одного или нескольких имён объекта предмета или условие, которое соответствует одному или нескольким именам предмета
Добавьте условие, в котором вы соответствуете идентификатору элемента имен или, если вы этого не знаете, вы можете использовать elemMatch для сопоставления в нескольких полях, т.е.
Используйте следующие условия извлечения для решения проблемы:
User.update(
{ _id: Number(req.params.id) },
{ $pull: { 'names': { $elemMatch: { 'text': "john", 'order': 3 }} } },
(error, success) => {
if (error) console.log(error);
console.log(success);
}
);