{
"_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")
}
我的数据结构店我想要做的就是最新的10个独特伏,internVolt,温度根据VIN和ESN字符串。还需要最新的时间戳。然后我试图使用mongo聚合方式来获得正确的结果。
db.log.aggregate({$sort:{timestamp:-1}},{$group:{_id : {esn:"$esn",vin:"$vin"},firstTimestamp:{$first:"$timestamp"},volts:{$addToSet:"$volt"}}},{$limit:5})
但是,这是我的结果看起来像
{ “_id”:{ “ESN”: “B”, “阿文”: “2”}, “firstTimestamp”: NumberLong( “1485852368147”),“伏特”:[11.95,10.08,10.77,10.47,0.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,10.99,10.61,10.28,10.97,10.3,10.31,11.81,11.8,10.42,11.51,10.72,11.3 9,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”), “伏特”:[10.81,11.83, 10.82,11.84,10.79,10.66,11.21,10.24,11.75,11.2] “innerVolts”:[...], “温度”:[...]}
我知道这一点。我只想得到伏特最后十个元素。 – wzf1943
我想我得到了你的问题。请检查我的版本。 –
有没有可能我最后10个元素不是第一个10?因为我发现最近十个元素是最新的10.我认为addToSet可能会保留一个链接列表。 – wzf1943