2015-02-09 76 views
0

我目前正在创建一个应该管理不同人群的Web服务。因此,我创建了一个Customer-Schema,并且我的MongoDB中的每个Document(不同Schema)都有一个字段customer。现在,如果我想删除一个客户,我必须删除与所述客户相关的所有文档。我的问题是,我不知道如何在不调用与Schema.remove({customer: customerId})连续的所有模式的情况下如何做到这一点。 是否存在搜索每个文档的“全局”remove/find命令?从不同模式查找文档

感谢您的帮助。

+0

可能重复的[如何从猫鼬找到所有的集合](http://stackoverflow.com/questions/18537875/how-to-find-all-the-collections-from-mongoose) – laggingreflex 2015-02-09 19:16:21

回答

0

与laggingreflex提供的链接,我想出了一个解决方案:

var modelNames = mongoose.connection.modelNames(); 
var counter = modelNames.length; 
for (var i in modelNames){ 
    result.model(modelNames[i]).remove({customer: req.params.id}, function(err){ 
    if(err) { return handleError(res, err); } 
    counter--; 
    if (!counter){ 
     result.remove(function(err) { 
     if(err) { return handleError(res, err); } 
      res.send(204); 
     }) 
    } 
    }); 
} 

如果有人有更好的主意,我希望能看到它。 :-)

+0

如果用'async'软件包重写上面的代码,这可能会更好一些 – Simon 2015-02-25 13:27:50

0

不幸的是没有。

这将必须通过收集完成收集。

这是一个普遍的想法,删除数据库中的文档是一个坏主意,除非它是一个队列,所以通常认为mark表示用户不活动,而不是删除它们及其所有文档。

+0

不幸的是一个客户是一个有很多用户的公司,所以它也是一个存储问题,所以标记为不活动并不是我更喜欢的解决方案 – Simon 2015-02-09 21:40:01