gpt4 book ai didi

arrays - Mongoose :删除引用对象时删除数组中的所有引用对象

转载 作者:可可西里 更新时间:2023-11-01 09:12:58 25 4
gpt4 key购买 nike

在我的 MEAN 应用程序 (Angular2) 中,我想在删除对象本身时删除所有引用的对象。我将 Mongoose 与删除中间件一起使用。所以我的 question.js 文件看起来像这样:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Answer = require('../models/answer');

var QuestionSchema = new Schema({
content: {type: String, required: true},
questionTxt: {type: String, required: true},
position: {type: Number, min: 0, required: true},
answers: [{type: Schema.Types.ObjectId, ref: "Answer"}],
followUpQuestions: [{type: Schema.Types.ObjectId, ref: "Question"}],
additionalInfoText: {type: String},
lastChangedBy: {type: Schema.Types.ObjectId, ref: 'User'},
lastChanged: {type: Date},
isRoot: {type: Boolean}
});

/**********************************************
* Deletes all answers and questions referenced by this question
***********************************************/

schema.post('remove', function(doc) {
var deletedQuestion = doc;
//code missing to find the answers and delete all referenced answers
});
});

module.exports = mongoose.model('Question', QuestionSchema);

我知道我可以通过以下方式找到一个:

Answer.findById(doc.answer, function(err, doc){});

我现在还可以使用 find 方法查找多个元素并添加查询。但我只是找到了一些东西来找到一个特定的 id 或只从数组中删除它们。但我希望删除对象,而不仅仅是该数组中的引用。

如果是重复的,请随时关闭这个问题,但我在谷歌搜索、堆栈溢出和相关主题中都没有找到答案。

感谢您的帮助!

最佳答案

为什么不简单地添加自己的 'remove' Mongoose middlewareQuestion 架构上删除所有其他文档,即引用问题的答案。

例子:在中间件函数中,你可以这样做:

QuestionSchema.pre('remove', function(callback) {
// Remove all the docs that refers
this.model('Answers').remove({ Question_Id: this._id }, callback);
});


如果您有兴趣使用级联删除,可以查看为其构建的 npm 模块。级联关系 - 链接 NPM & Git

$cascadeDelete defines whether or not deleting a document will also delete its related documents. If this is set to true, then all related documents will be deleted when the main document is deleted.

关于arrays - Mongoose :删除引用对象时删除数组中的所有引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com