删除另一个Schema MongoDB中的文档和所有引用

时间:2018-08-09 12:31:28

标签: javascript mongodb

我有一个用于Forms的架构,另一个是用于Documents的架构...

每个Document必须具有与以下内容相关的_id的引用Form:   因此在数据库中,我可以有多个Documents和相同的Form._id

我想知道如何为DELETE创建一个Forms函数来执行以下操作:

  • 找到所有拥有此DocumentsForm._id的所有DELETE,然后 删除Form本身。

2 个答案:

答案 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" }