我有一个用于Forms
的架构,另一个是用于Documents
的架构...
每个Document
必须具有与以下内容相关的_id
的引用Form
:
因此在数据库中,我可以有多个Documents
和相同的Form._id
。
我想知道如何为DELETE
创建一个Forms
函数来执行以下操作:
Documents
和Form._id
的所有DELETE
,然后
删除Form
本身。 答案 0 :(得分:0)
在我们的应用程序中,我们这样做: 删除用户后,还要删除其相应的扫描和类别
const scanModel = require("./Scan");
const categoryModel = require("./Category");
const userSchema = new mongoose.Schema({
...
})
userSchema.pre("remove", function(next) {
// 'this' is the user being removed. Provide callbacks here if you want
// to be notified of the calls' result.
scanModel.remove({ user: this._id }).exec();
categoryModel.remove({ user: this._id }).exec();
next();
});
答案 1 :(得分:0)
好吧,所以让我们从数据库中的一些基本表单和文档开始
db.forms.insertMany([
{ _id : 1, name : "Form 1"},
{ _id : 2, name : "Form 2"}
]);
db.documents.insertMany([
{ _id : 1, formId : 1, name : "Doc 1" },
{ _id : 2, formId : 1, name : "Doc 2" },
{ _id : 3, formId : 1, name : "Doc 3" },
{ _id : 4, formId : 2, name : "Doc 4" }
])
> db.forms.find()
{ "_id" : 1, "name" : "Form 1" }
{ "_id" : 2, "name" : "Form 2" }
> db.documents.find()
{ "_id" : 1, "formId" : 1, "name" : "Doc 1" }
{ "_id" : 2, "formId" : 1, "name" : "Doc 2" }
{ "_id" : 3, "formId" : 1, "name" : "Doc 3" }
{ "_id" : 4, "formId" : 2, "name" : "Doc 4" }
然后,我们可以创建一个简单的函数来传递表单ID,并查找和删除该表单ID的所有文档。
function removeForm(formId){
var ids = db.documents.find({ formId : formId}, { _id : 1 } ).map(function(doc){ return doc["_id"]; });
db.documents.remove( { "_id" : { "$in" : ids } } );
db.forms.remove( { "_id" : formId } );
}
然后我们可以调用removeForm。
removeForm(1);
然后我们将看到我们的文档和表格已删除
> db.forms.find()
{ "_id" : 2, "name" : "Form 2" }
> db.documents.find()
{ "_id" : 4, "formId" : 2, "name" : "Doc 4" }