找到属于附表

时间:2015-07-26 12:49:17

标签: mongodb meteor

这将是一个奇怪的问题。我想我知道答案,但经过近一个小时与我的程序员讨论正确的解决方案后,我需要一个现实/健全性检查。如果这不符合stackoverflow上的格式,请道歉。

我们正在使用MeteorJS& MongoDB的。

我们的收藏品设置如下:

时间表属于事件活动属于课程

时间表包含以下字段: _id,start_time,end_time,eventId,lecturerId。 事件和课程的字段无关紧要。

然后,我们有一个民意调查功能。每个计划可以有一个或多个民意调查。因此,民意调查属于附表。

现在这就是事情变得奇怪的地方。

我们如何找到特定时间表的民意调查?

我的解决方案是这样的:

    Polls.find({scheduleId: _id-of-schedule})

我的程序员认为民意调查应该属于课程而不是附表,而是希望利用时间和讲师来寻找民意调查。像这样:

    Polls.find({
      lecturerId: id-of-lecturer,
      activate_timedate: {
        $gte: ISODate(start-time-of-schedule),
        $lt: ISODate(end-time-of-schedule)
      }
    })

现在,他绝对肯定这是要走的路,而不是使用scheduleId。他说,速度惩罚将是可以忽略不计的,并且这在某种程度上“更加灵活”。

他认为,如果民意调查属于课程而不是计划,那么显示早期计划中的民意调查会更容易。这是真的。

但是,做下面这样的事情真的是一个混乱的解决方案吗?

    courseId = schedule.courseId;
    schedules = Schedules.find({courseId: courseId}, {fields: {_id:1}})
    scheduleIds = _.pluck(schedules, '_id')
    polls = Polls.find({scheduleId: {$in: {scheduleIds} }})

当然,更好的方法可能是在民意调查文件中存储courseId和scheduleId,并且只是:

    polls = Polls.find({courseId: _id-of-course})

我问这个的原因是是CS学生,而我是业余爱好者。所以我很乐意接受我错了。但我想知道我是怎么错的,如果是这样的话。

如果我需要提供任何额外信息,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

检查我的理解:

  • 1个课程有很多活动
  • 1个事件有很多时间表(也可以调用此事件)
  • 1个时间表有1个讲师
  • 1个计划有1个民意调查

如果是这种情况,我建议对事件+时间表进行非规范化,因此事件如下所示:

活动:_id, lecturer, startTime, stopTime, poll, eventName, courseId

比较不同讲师如何教授同一事件:Events.find({eventName: desiredEventName})

根据poll的大小,您可以将其作为嵌套的objet内部事件,或使其成为自己的集合。就像你拥有它一样,它是一个单独的集合,所以现在你的查询将是: Polls.find(event.poll);

然而,除非它是巨大的&有可能超过16MB的文件上限,我会嵌套它。