我的问题是对此question
中所提问题的扩展虽然引用的问题有兴趣获得最后的“真实”价值 最近一次为每个小组。我正在寻找一种解决方案,可以在每个学生的特定时间之前为所有用户返回最新的“真实”值。
我收藏的文件如下:
{
studentName: String,
createdAt: Date,
isAbondoned: boolean
}
文件的例子是:
1-
{
"studentName" : "Aman",
"createdAt" : ISODate("2016-02-24T04:10:30.486+0000"),
"isAbandoned" : true
}
2-
{
"studentName" : "Aman",
"createdAt" : ISODate("2016-02-24T04:13:01.932+0000"),
"isAbandoned" : false
}
3-
{
"studentName" : "Rajeev",
"createdAt" : ISODate("2016-02-25T11:27:17.281+0000"),
"isAbandoned" : true,
}
4-
{
"studentName" : "Aman",
"createdAt" : ISODate("2016-02-26T11:27:17.281+0000"),
"isAbandoned" : true,
}
现在我想在给定的查询日期之前找到他们的'isAbandoned'对于最后'createdAt'文档的学生列表。
以上示例的必需输出,查询日期=“ISODate(”2016-02-26T11:27:17.281 + 0000“)”:
{
"studentName" : "Rajeev"
}
{
"studentName" : "Aman"
}
但是对于查询日期ISODate(“2016-02-25T11:27:17.281 + 0000”),它应该只是结果
{
"studentName" : "Rajeev"
}
答案提供here,使用汇总框架,也可用于解决我的问题,但这是最优解决方案吗?
学生名单可能是数百万。迭代每个学生获得最新的价值似乎是一项繁琐的工作。
我能想到的另一种选择是随着时间的推移统一存储查询结果。
例如存储日期日期(“2016-02-22”),日期(“2016-02-26”),日期(“2016-02-30”)等的结果。 每当我查询已经计算的任何日期时,我都可以直接返回计算和存储的值。 对于计算表中不存在的任何查询日期,我可以获取小于查询日期的最新日期,并将该时间用作原始数据库的开始时间,以逐步查找进一步的更新并计算查询日期的结果。 这种方法的优点是我不需要遍历整个列表,只需要查看晚于开始时间的那些更新。 有任何建议,mongodb第二种方法是否可行?