удалить объект из массива документов в коллекции mongodb, используя mongoose - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь удалить элемент из атрибута массива моего объекта. Это моя схема:

const userSchema = new mongoose.Schema({
    userID: {
      type: Number
    },
    name: {
        type: String
    },
    names: [
    {
      text: { type: String, required: true },
      order: {
        type: Number,
        required: true 
      }
    }
   ]
});

это моя функция мангуста:

User.findOne({ userID: Number(req.params.id) })
    .then((user) => {
        user.names.remove({text: "john", order: 3});
          recipe.save(() => {
            res.json(recipe);
          });
    })

Я не понимаю, почему это не хорошо: /

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Согласно документации 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);
          }
       );
0 голосов
/ 02 июля 2018

Чтобы удалить элемент из массива в документе, пожалуйста, следуйте инструкциям ниже

User.update(
    {
        userID: Number(req.params.id),

    },
    {
        $pull: { names: { $elemMatch: { text: "john", order: 3 } } }
    },
    {
        multi: false
    }
).lean().then((Status) => {
    console.log("Status-->", Status);
    res.json('Removed Successfully');
})

См. Оператор $ pull по ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...