从整个mongodb数据库中删除匹配的文档

Remove matching documents from the entire mongo db

本文关键字:文档 删除 mongodb 数据库      更新时间:2023-09-26

我有一个API,用户可以在其中添加,更新和删除cats -为了示例的缘故。

每个cat都有对其他mongodb集合的引用,比如ownervet

所以当我添加了一个猫,这是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集合中删除猫,因为我只搜索Id -其行为如预期的那样。我是否必须分别为每个集合执行查找和删除操作?

任何帮助将不胜感激!

谢谢

显然,当你在猫的集合Cats.findByIdAndRemove上触发findByIDandRemove时,它只会从单个集合中删除它,通常这就是你应该如何编写代码。

如果您想从所有三个集合中删除它,那么您还需要调用兽医和所有者集合上的findByIdAndRemove

可以通过创建一个侦听器来维护相关集合的完整性来实现这一点。

删除时设置一个附加属性toBeDeleted: true

收听Cats表的更新。寻找一些toBeDeleted: true

收听代码执行参照完整性管理如:

remove from Cats

remove from Vets

remove from Owners

因此集合不应该是相关的。为了避免这种开销,您可以将这三个文档保存为一个文档。您总是可以从该文档检索惟一的所有者和兽医。遵循文档。一般来说,我们不应该在关系范式中尝试mongodb(尽管我理解某些情况,这保证了你正在做的事情)