У меня есть две схемы:
Навыки и умения:
var mongoose = require("mongoose");
var SkillSchema = new mongoose.Schema({
skill: { type: String },
tally: { type: Number, default: 0 },
associatedUsers: { type: Array },
});
module.exports = mongoose.model("Skills", SkillSchema);
Профиль:
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var profileSchema = new mongoose.Schema({
username: String,
password: String,
skills: { type: Array }
}
);
profileSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("Profile", profileSchema);
Документ Skills содержит навыки, связанные с различными users (Skills. Skills.associatedUsers):
{
"_id" : ObjectId("5cab5c8788368eafb68b75a4"),
"skill" : "cooking",
"__v" : 0,
"associatedUsers" : [
ObjectId("5cab5c7d88368eafb68b75a0"),
ObjectId("5cab546a7fb2b3a71c0404fa")
],
"tally" : 0
}
И документ Profile содержит набор навыков:
{
"_id" : ObjectId("5cab546a7fb2b3a71c0404fa"),
"skills" : [
"cooking", "cleaning"
],
"__v" : 0,
"username" : "deleteMe"
}
Я пытаюсь реализовать предварительный хук в схеме Profile, чтобы при удалении пользователя любой экземпляр user._id в Skills.associatedUsers также удалялся.
Я пробовал следующее, но на самом деле он удаляет всю запись для этого навыка:
const Skills = require("./skills");
profileSchema.pre('remove', async function(){
console.info("clearing user ID from skills model");
await Skills.remove({associatedUsers: { $in: this._id } });
});
module.exports = mongoose.model("Profile", profileSchema);
Как я могу pull._id удаляемого пользователя из массива associatedUsers в документе Skills?



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


Вам нужно update с оператором $тянуть и указать multi: true, чтобы удалить это значение из всех документов в коллекции profile:
profileSchema.pre('remove', async function(){
console.info("clearing user ID from skills model");
await Skills.update({}, { $pull: { associatedUsers: { $in: this._id } } }, { multi: true });
});