【发布时间】:2015-05-20 03:06:01
【问题描述】:
我目前正在构建一个竞赛应用程序,其中有竞赛集合、问题集合、条目集合和答案集合。我的问题是,当我删除比赛时,我不知道最好的方法是删除属于比赛的所有问题、答案和条目。这就是我目前处理问题的方式:
Template.ContestItem.events({
'click .delete': function(e, tmpl) {
e.preventDefault();
var currentContestId = this._id;
var entries = Entries.find({contest_id: currentContestId});
var questions = Questions.find({contest_id: currentContestId});
var answers = Answers.find({contest_id: currentContestId});
answers.forEach(function(answer) {
Answers.remove(answer._id);
});
questions.forEach(function(question) {
Questions.remove(question._id);
});
entries.forEach(function(entry) {
Entries.remove(entry._id);
});
Contests.remove(currentContestId);
}
});
我觉得必须有更好的方法来做到这一点......我的解决方案似乎被破解了。我对 MongoDB 不是很熟悉,所以这可能是一个明显的错误。请让我知道是否有更好的方法。谢谢!
【问题讨论】:
-
为什么不直接删除收藏?
-
很简单。如果您只是删除集合,那么您没有删除所有内容的开销。
.remove()是有代价的。.drop()非常即时。 -
那么我可以将特定文档放到集合中吗?我不想放弃整个收藏,因为还有其他竞赛,包括问题、条目和答案。我对 nosql 完全陌生,所以当我听到“drop”时,我会想到完全擦除关系数据库。
-
对不起。大大的误读。你想要像“级联删除”这样的东西,不是吗?我相信有一个猫鼬插件。但当然它不是“事务性的”,因为这在 MongoDB 集合中是不可能的,除非代码库在客户端上考虑了所有因素。
-
不用担心。是的,我在 Rails 模型中的 has_many 关系上寻找类似“dependent::destroy”的东西。也许 MongoDB 没有这样的东西?
标签: javascript mongodb meteor database