Mongodb 确定Mongo文档是否是第一个具有特定属性的文档

Mongodb 确定Mongo文档是否是第一个具有特定属性的文档,mongodb,Mongodb,我需要生成一个关于一组文档的报告,时间戳在两个日期之间。报告需要列出每个文档,但它还需要为每个文档包含一个字段,以指示它是否是其组中的第一个文档,这由属性表示 事实上有一点复杂,即虽然只应包括两个日期之间的文档,但在决定每个文档是否是其集合中的第一个文档时,需要考虑开始日期之前的文档 例如,给定数据 { "_id": 1, "group": "A", "timestamp": "2015-01-01" } { "_id": 2, "group": "B", "timestamp": "2015-

我需要生成一个关于一组文档的报告,时间戳在两个日期之间。报告需要列出每个文档,但它还需要为每个文档包含一个字段,以指示它是否是其组中的第一个文档,这由属性表示

事实上有一点复杂,即虽然只应包括两个日期之间的文档,但在决定每个文档是否是其集合中的第一个文档时,需要考虑开始日期之前的文档

例如,给定数据

{ "_id": 1, "group": "A", "timestamp": "2015-01-01" }
{ "_id": 2, "group": "B", "timestamp": "2015-01-02" }
{ "_id": 3, "group": "A", "timestamp": "2015-01-03" }
{ "_id": 4, "group": "C", "timestamp": "2015-01-04" }
{ "_id": 5, "group": "B", "timestamp": "2015-01-05" }
{ "_id": 6, "group": "C", "timestamp": "2015-01-06" }
生成从2015-01-02到2015-01-05的报告将返回

{ "_id": 2, "group": "B", "timestamp": "2015-01-02", "first": 1 }
{ "_id": 3, "group": "A", "timestamp": "2015-01-03", "first": 0 }
{ "_id": 4, "group": "C", "timestamp": "2015-01-04", "first": 1 }
{ "_id": 5, "group": "B", "timestamp": "2015-01-05", "first": 0 }

目前,我通过按组排序所有文档,然后按时间戳排序,然后在整个数据集上循环,跟踪前一行,以确定日期范围内的行是否为其类型的第一行。对于一个大数据集,这是非常缓慢的-它感觉好像必须有一个更好的方式,包括分组或一些聪明的东西,但我的Mongo技能不能胜任这项工作-有什么建议吗

您的时间戳是否在数据库中实际保存为字符串?如果是这样,我强烈建议更改模式设计,以便timestamp字段保存有效的日期对象?我似乎没有得到你想要的。请详细说明。当然,@chridam是对的:ISODates之间的可比性更好,需要更少的空间(64位int需要8个字节,而10个字节的字符串需要8个字节)。@chridam说得好,谢谢你的建议feedback@MarkusWMahlbergC将是第一个,因为它是C组中的第一个文档(按时间戳)。您的时间戳是否实际保存为数据库中的字符串?如果是这样,我强烈建议更改模式设计,以便timestamp字段保存有效的日期对象?我似乎没有得到你想要的。请详细说明。当然,@chridam是对的:ISODates之间的可比性更好,需要更少的空间(64位int需要8个字节,而10个字节的字符串需要8个字节)。@chridam说得好,谢谢你的建议feedback@MarkusWMahlbergC将是第一个,因为它是C组中的第一个文档(按时间戳)。