我来自SQL世界,仍在学习查询MongoDB,我遇到了这个问题......
我有一个学生集合,其中包含一系列会议
student: {
meetings: [
{time: x},
{time: y},
{time: z}
]
}
会议数组具有动态大小,其元素按时间在asc中排序,因此数组中的第一次会议将具有最早的时间。
我可以通过以下方式查询所有第一次会面开始的学生:
db.students.find( { "meetings.0.time": {$gt: ISODate()} } )
现在我还需要查询以获取最后一次会议在特定时间之前开始的所有学生。但是,以下方法无效:
db.students.find( { "meetings.-1.time": {$lt: ISODate()} } )
你们怎么解决这个问题?
答案 0 :(得分:1)
这对你有用吗?
db.student.aggregate(
{ $unwind : "$meetings" },
{ $group : { _id: "$_id", lastMeeting : { $max : "$meetings.time" }}},
{ $match: { lastMeeting : { $lt : IsoDate(...) } }
);