1

我来自 SQL 世界,还在学习查询 MongoDB,我遇到了这个问题......

设置:

我有一个学生集合,其中包含一系列会议

student: {
  meetings: [
    {time: x},
    {time: y},
    {time: z}
  ]
}

meeting 数组具有动态大小,其元素按时间按 asc 排序,因此数组中的第一次会议将具有最早的时间。

我可以通过以下方式查询所有在特定时间后开始第一次会议的学生:

db.students.find( { "meetings.0.time": {$gt: ISODate()} } )

问题:

现在我还需要查询以获取最后一次会议在特定时间之前开始的所有学生。但是,以下方法不起作用:

db.students.find( { "meetings.-1.time": {$lt: ISODate()} } )

你们将如何解决这个问题?

4

1 回答 1

1

这对你有用吗?

db.student.aggregate(
  { $unwind : "$meetings" },
  { $group : { _id: "$_id", lastMeeting : { $max : "$meetings.time" }}},
  { $match: { lastMeeting : { $lt : IsoDate(...) } } 
);
于 2013-03-19T23:16:56.253 回答