繁体   English   中英

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

[英]Remove matching documents from the entire mongo db

为了示例,我有一个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集合中删除了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM