У меня есть приложение 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
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы удалить определенное поле из документа, вы можете использовать оператор $ unset
ListItem.findOneAndUpdate(query, { "$unset": { "boughtBy": "" }}, options, callback)
Мы можем изменить булево значение купленного и удалить поле купленное в одном запросе:
ListItem.findOneAndUpdate(query, { "$unset": { "boughtBy": "" }, "$set": { "bought": false } }, options, callback)