我一直在尝试从一个集合中每1小时提取一条记录,该集合在datetime(日期)上每10秒有1条记录。文件是这样的:
datetime: 2021-11-26T15:08:20.000+00:00
owner_id: "INTERNAL"
motor_id: 24
datetime单据字段为Date()类型。
在这个集合中,我在datetime字段上每10秒有1条记录(几天),但我想每个1小时datetime间隔只提取一条记录。我怎么能把这个存档?
提前感谢任何提示,帮助或正确的文档方向。
我试着去理解这个:https://mongoing.com/docs/reference/operator/aggregation/filter.html没有成功。不知道如何增加时间。
编辑:关于收藏的更多信息:
collection 1有26.303条记录如下:
{
"_id": {
"$oid": "644b34a3756b9c1dc169e20d"
},
"datetime": {
"$date": {
"$numberLong": "1637939300000"
}
},
"customer_id": "INTERNAL",
"owner_id": "INTERNAL",
"GMHP": -0.54,
"AMHP": 198.19,
"OMHP": 428.883544921875,
"AROP": 148.57066345214844,
"OROP": 102.5451889038086
}
每个文档都有一个10秒的时间间隔存储在datetime字段中。我计划在将来将这些文档更改为时间序列。我的目标是选择每个小时的文档,例如:
第1份文件日期时间:2021-11- 26 T15:08:20.000+00:00第二份文件日期时间:2021-11- 26 T15:09:20.000+00:00等...
我可以安全地忽略T15:08:30到T15:09:10之间的所有字段。
2条答案
按热度按时间vc9ivgsu1#
一个选项是简单地使用
$dateToParts
。如果每10秒有一个文档,$match
步骤将返回每小时的第一个文档:了解它在playground example上的工作原理
yruzcnhs2#
经过一番努力,我试图让尼姆罗德serok发送的查询在Mongo和DocumentDB上都能工作。然后我意识到当使用PyMongo或vanilla MongoDB驱动程序时,DocumentDB的问题是多么有限。
DocumentDB不支持
$set
,因此我不得不将其替换为$addFields
。之后我意识到dateToParts
也不受支持,因为这个函数需要字符串格式,而我有一个Date()类型。如果有人想在DocumentDB上实现类似的结果,这里有一个解决方案。可能有更好的解决方案,但它对我来说与Mongo查询相同的结果。
(Im使用PyMongo)
entry_date
从集合中确定第一个datetime,这是可选的。您可以替换minute
和second
变量以满足范围需求。我希望它也能帮助DocumentDB用户。