我想找出每次状态更改之间的停留时间。
示例集合 -
/* 1 */
{
"_id" : ObjectId("5e4889a7c7959f6a13039902"),
"presenceStatus" : 0,
"createdAt" : ISODate("2020-02-16T00:14:35.121Z"),
"updatedAt" : ISODate("2020-02-16T00:14:35.121Z"),
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("5e4889a7c7959f6a1303990c"),
"presenceStatus" : 1,
"createdAt" : ISODate("2020-02-16T00:15:35.121Z"),
"updatedAt" : ISODate("2020-02-16T00:15:35.121Z"),
"__v" : 0
}
/* 3 */
{
"_id" : ObjectId("5e4889a9c7959f6a1303995c"),
"presenceStatus" : 1,
"sensingTime" : ISODate("2020-02-16T00:15:37.000Z"),
"createdAt" : ISODate("2020-02-16T00:15:37.420Z"),
"updatedAt" : ISODate("2020-02-16T00:15:37.420Z"),
"__v" : 0
}
/* 4 */
{
"_id" : ObjectId("5e4889b0c7959f6a130399ff"),
"presenceStatus" : 1,
"createdAt" : ISODate("2020-02-16T00:15:44.316Z"),
"updatedAt" : ISODate("2020-02-16T00:15:44.316Z"),
"__v" : 0
}
/* 5 */
{
"_id" : ObjectId("5e4889b3c7959f6a13039a58"),
"presenceStatus" : 1,
"sensingTime" : ISODate("2020-02-16T00:15:47.000Z"),
"createdAt" : ISODate("2020-02-16T00:15:47.181Z"),
"updatedAt" : ISODate("2020-02-16T00:15:47.181Z"),
"__v" : 0
}
/* 6 */
{
"_id" : ObjectId("5e4889b5c7959f6a13039aad"),
"presenceStatus" : 1,
"sensingTime" : ISODate("2020-02-16T00:15:49.000Z"),
"createdAt" : ISODate("2020-02-16T00:15:49.545Z"),
"updatedAt" : ISODate("2020-02-16T00:15:49.545Z"),
"__v" : 0
}
/* 7 */
{
"_id" : ObjectId("5e4889b9c7959f6a13039b28"),
"presenceStatus" : 1,
"sensingTime" : ISODate("2020-02-16T00:15:53.000Z"),
"createdAt" : ISODate("2020-02-16T00:15:53.389Z"),
"updatedAt" : ISODate("2020-02-16T00:15:53.389Z"),
"__v" : 0
}
/* 8 */
{
"_id" : ObjectId("5e4889bcc7959f6a13039b78"),
"presenceStatus" : 1,
"sensingTime" : ISODate("2020-02-16T00:15:56.000Z"),
"createdAt" : ISODate("2020-02-16T00:15:56.007Z"),
"updatedAt" : ISODate("2020-02-16T00:15:56.007Z"),
"__v" : 0
}
/* 9 */
{
"_id" : ObjectId("5e4889bfc7959f6a13039c00"),
"presenceStatus" : 1,
"sensingTime" : ISODate("2020-02-16T00:15:59.000Z"),
"createdAt" : ISODate("2020-02-16T00:15:59.619Z"),
"updatedAt" : ISODate("2020-02-16T00:15:59.619Z"),
"__v" : 0
}
/* 10 */
{
"_id" : ObjectId("5e4889c2c7959f6a13039c4a"),
"presenceStatus" : 0,
"sensingTime" : ISODate("2020-02-16T00:16:02.000Z"),
"createdAt" : ISODate("2020-02-16T00:16:02.100Z"),
"updatedAt" : ISODate("2020-02-16T00:16:02.100Z"),
"__v" : 0
}
正如您所看到的,第二个文档中的存在状态从值 0 更改为 1。
我想记录这个dwell状态保持为1的时间段。(基本上是status = 1到status = 0之间的时间差)
当它再次发现 PresenceStatus 1 时,相同的过程会再次启动,并记录该数据块的 PresenceStatus 保持为 1 的时间段。
结果收集看起来像 -
{
"_id" : xxx
"occupiedTime" : ISODate("2020-02-16T00:15:35.121Z"), // *updatedAt* value of document 2, cause that's when it changed to 1.
"vacantTime" : ISODate("2020-02-16T00:16:02.100Z"), // *updatedAt* of document 10, because that's when status changed from 0 to 1.
"dwellTime" : (vacant time - occupied time in HH:MM:SS)
"created" : "2019-05-29 07:08:13",
"__v" : 0
}
感谢您的帮助。