【发布时间】:2017-07-05 00:22:59
【问题描述】:
这是我在数据库中存储的数据结构
{
"_id" : ObjectId("58a4e451c164f95c98e96235"),
"_class" : "com.contix.log.parser.log.Log",
"vin" : "6",
"esn" : "c",
"volt" : 11.32,
"internVolt" : 4.14,
"temp" : 39.49,
"timestamp" : NumberLong("1483375743285")
}
我想要做的是根据 vin 和 esn 字符串获取最新的 10 个独特的 volt、internVolt、temp。还需要最新的时间戳。然后我尝试使用 mongo 聚合方式来获得正确的结果。
db.log.aggregate({$sort:{timestamp:-1}},{$group:{_id : {esn:"$esn",vin:"$vin"},firstTimestamp:{$first:"$timestamp"},volts:{$addToSet:"$volt"}}},{$limit:5})
但这是我的结果看起来像
{“_id”:{“esn”:“b”,“vin”:“2”},“firstTimestamp”: NumberLong("1485852368147"), "伏特" : [ 11.95, 10.08, 10.77, 10.47, 11.41,10.36,10.96,10.75,10.39,10.53,10.1,10.22,11.16,10.11,11.87,11.33,11.82,11.78,10.25,11.86,10.5,10.41,11.3,11.31,11.97,10.64,11.57,10.93,10.02, 10.68,10.9,11.53,10.46,11.42,11.73,11.32,10.19,10.51,11.35,11.28,10.65,10.21,11.18,10.91,11.43,10.52,11.34,11.1,1099,10.61,10.28,1097,10.3,1031, 11.81,11.8,10.42,11.51,10.72,11.39,10.69,11.27,11.11,10.15,10.78,10.58,11.49,10.94,11.64,10.32,11.63,10.03,10.81,11.83,10.82,11.84,10.79,10.66,11.21, 10.24、11.75、11.2] }
还有其他 4 个类似的东西。
我不知道是否有任何方法可以修剪 $volts 这种数据 int 组管道。 $limit 或 $skip 操作似乎用于整个文档。
我的梦想结果应该如下所示。
{“_id”:{“esn”:“b”,“vin”:“2”},“firstTimestamp”: NumberLong("1485852368147"), "volts" : [ 10.81, 11.83, 10.82, 11.84, 10.79, 10.66, 11.21, 10.24, 11.75, 11.2 ], "innerVolts":[...], "temp":[.. .] }
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework