在给定时间返回每个组的最后一个“true”值

时间:2017-05-23 04:53:49

标签: mongodb

我的问题是对此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第二种方法是否可行?

0 个答案:

没有答案