[英]Remove matching documents from the entire mongo db
为了示例,我有一个API,用户可以在其中添加,更新和删除cats
。
每cat
都会引用其他mongodb
集合,比如owner
和vet
。
因此,当我添加一只猫时,程序运行一次之后, mongodb
集合将如下所示:
db.find.cats()
{ "_id" : ObjectId("580"), "name" : "Hi", "username" : "test1111"}
db.find.vet()
{ "_id" : ObjectId("111"), "place" : "World", "username" : "test1111"}
db.find.owner()
{ "_id" : ObjectId("123"), "job" : "Engineer", "username" : "test1111"}
当用户删除Cat
,我希望删除三个集合中的所有三个文档,因为它们是通过cats用户名链接到cat的。 我怎样才能做到这一点?
我已经试过了:
router.delete('/test', function (req, res, next) {
Cats.findByIdAndRemove(req.params.id, req.body, function (err, post) {
if (err) return next(err);
res.json({success: true});
});
});
但是,这仅从Cat
集合中删除了cat,因为我仅在搜索ID-行为与预期的一样。 我需要分别为每个集合执行查找和删除吗?
任何帮助,将不胜感激!
谢谢
显然,当您在cats集合Cats.findByIdAndRemove上Cats.findByIdAndRemove
,它将仅从单个集合中删除它,通常这就是您应该编写代码的方式。
如果要从所有三个中删除它,则还需要在vet和owner集合上调用findByIdAndRemove
。
您可以通过创建一个维护相关集合完整性的侦听器来做到这一点。
删除时,将一个附加属性设置为
toBeDeleted: true
在
Cats
表上收听更新。 寻找一些toBeDeleted: true
侦听代码可以根据需要执行引用完整性管理:
从
Cats
删除从
Vets
删除从
Owners
删除
因此,集合不应该相关。 为了避免这种开销,您可以将所有三个文档保存为一个文档。 您始终可以从该文档中检索唯一的所有者和兽医。 请遵循文档。 通常,我们不应该尝试在关系范式中使用mongodb(尽管我了解某些情况可以保证您在做什么)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.