#javascript #arrays #mongodb #mongoose #mongoose-schema
#javascript #массивы #mongodb #мангуст #мангуст-схема
Вопрос:
я пытаюсь автоматически удалять ссылки на уведомления от пользователей, когда уведомление удаляется
схема пользователя выглядит следующим образом
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
notifications: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Notification",
},
],
});
module.exports = mongoose.model("User", userSchema);
Модель уведомлений выглядит следующим образом
const mongoose = require("mongoose");
const notificationSchema = new mongoose.Schema({
type: String,
created: {
type: Date,
default: Date.now,
},
});
notificationSchema.pre("deleteOne", function (next) {
this.model("User").deleteOne({ notifications: this._id }, next);
});
module.exports = mongoose.model("Notification", notificationSchema);
когда я пытаюсь удалить уведомление, я получаю сообщение об ошибке, которое выглядит так
ObjectParameterError: Parameter "obj" to Document() must be an object, got User
также есть ли способ автоматически удалить его [ссылки на уведомления в user], используя TTL для уведомлений
Ответ №1:
хорошо, после нескольких попыток и ошибок. Я придумал это решение..
const mongoose = require("mongoose");
const notificationSchema = new mongoose.Schema({
type: String,
created: {
type: Date,
default: Date.now,
},
});
notificationSchema.pre("deleteOne", function (next) {
let id = this.getQuery()["_id"];
mongoose.model("User").findOne(
{
notifications: id,
},
(err, res) => {
const index = res.notifications.findIndex((x) => x._id == id);
res.notifications.splice(index, 1);
res.save();
next();
}
);
});
module.exports = mongoose.model("Notification", notificationSchema);
Могу ли я внести какие-либо улучшения?