由于主要使用PostgreSQL,所以我是MongoDB的新手,并且无法以所需的JSON格式构造复杂的查询(在SQL中,我将使用CTE)。为了提供简化的示例-许多汽车具有自己的唯一标识符vin
。保留的车会发出砰的声响,没有保留的车会发出和声。
我的收藏集engine
中有一些结构如下的对象:
{
"_id" : ObjectId("1"),
"vin" : "12345",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329250,
"status" : "LOCKED"
}
}
{
"_id" : ObjectId("2"),
"vin" : "12345",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329260,
"status" : "LOCKED"
}
}
{
"_id" : ObjectId("3"),
"vin" : "12345",
"class_name" : "bar",
"decoded_payload" : {
"timestamp" : 1547329270,
"status" : "UNLOCKED",
"reservation_id" : "71"
}
}
{
"_id" : ObjectId("4"),
"vin" : "12345",
"class_name" : "baz",
"decoded_payload" : {
"timestamp" : 1547329280,
"status" : "UNLOCKED",
"reservation_id" : "71"
}
}
{
"_id" : ObjectId("5"),
"vin" : "12345",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329290,
"status" : "NO SIGNAL"
}
}
{
"_id" : ObjectId("6"),
"vin" : "12345",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329300,
"status" : "LOCKED"
}
}
在保留之外产生的记录始终属于foo
类(那些在 保留期间可以变化,但从不foo
)
我只对在每个vin上的每个保留之前和之后立即获取status
感兴趣。可以通过将类foo
与最接近的时间戳记reservation_id
和vin
进行最接近的记录来检索,因为我的目标是检索每个{{在每个reservation_id
以上示例的输出类似于
vin
两个保留有可能背对背-在单个{"vin": "1234", "reservation_id": "71", "pre_status": "LOCKED", "post_status": "NO SIGNAL"}
上的保留之间没有“ foo”类-这些情况我想完全忽略。
到目前为止,我本人有保留意见,但是希望您对进一步进行操作提出任何建议-在上述情况下使用vin
语句是否合适?
forEach