Как удалить объект из модели Mongoose node.js

У меня есть приложение node.js, использующее экспресс и мангуст.

У меня есть модель listItem, которая является потомком List, который является потомком User. Я успешно добавляю в модель ListItem, когда пользователь отмечает один из listItems как купленный.

Например. Это модель Элемент списка:

var mongoose = require("mongoose");

var listItemSchema = mongoose.Schema({
    text: String,
    url: String,
    bought:Boolean,
    boughtBy: {
        name: String,
        id: {
         type: mongoose.Schema.Types.ObjectId,
         ref: "User"
        }
    }
});

module.exports = mongoose.model("ListItem", listItemSchema);

И это код, который добавляет пользователя, который пометил его как купленный (он находится внутри функции FindByIDAndUpdate ())

//Add that it was bought and who bought it into model
updatedListItem.bought = boughtFlag;
updatedListItem.boughtBy.id = boughtByID;
updatedListItem.boughtBy.name = boughtByName;

//save model to DB
updatedListItem.save();

Итак, этот код работает, и модель listItem успешно показывает идентификатор и имя пользователя, который его купил. Однако теперь я хочу иметь возможность удалить этого пользователя из объекта, если он «Снял отметку с него».

Я пробовал это ниже, но безрезультатно. Как мне удалить данные boughtBy из модели, когда пользователь нажимает «Снять отметку»? Пробовали это:

$pull: {
  boughtBy: req.params.item_id 
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы удалить определенное поле из документа, вы можете использовать оператор $ unset

ListItem.findOneAndUpdate(query, { "$unset": { "boughtBy": "" }}, options, callback)

Мы можем изменить булево значение купленного и удалить поле купленное в одном запросе:

ListItem.findOneAndUpdate(query, { "$unset": { "boughtBy": "" }, "$set": { "bought": false } }, options, callback)

Другие вопросы по теме