我一直在尝试使用MongoDB Aggregation运算符来获取最后一条记录(基于' fixtm'这是修复时间)。每个记录都有一个设备ID,修复时间和一些其他信息,如纬度,经度,速度等。我的下面的聚合工作正常,它返回我每个设备的最后一条记录。但是我如何获得其他领域,如纬度,经度等?我已尝试在$ project列表中添加lat: 1
之类的内容,但无论我尝试了多少变体,其他值都不会显示出来。我认为这是因为它们不存在于集团运营商的_id领域或其他什么地方?任何指针都会非常有用。感谢
function() {
return db.gpspos.aggregate(
[
{
$sort: {
devid: 1,
fixtm: 1
}
}, {
$group: {
_id: "$devid",
lastData: {
$last: "$fixtm"
}
}
}, {
$project: {
_id: 0,
device_id: '$_id',
fixtime: '$lastData'
}
}
]
)
}
我从上面得到的是
{ "device_id" : 5, "fixtime" : 1462368405000 }
{ "device_id" : 4, "fixtime" : 1462372097000 }
我正在看的是这个
{ "device_id" : 5, "fixtime" : 1462368405000, "speed": 70.3, "lat": 103.33434 }
{ "device_id" : 4, "fixtime" : 1462372097000, "speed": 70.3, "lat": 101.33434 }
MongoDB中的文档示例
{
"_id": {
"$oid": "5729dc83f5be2411fb28c7c3"
},
"devid": 5,
"devnm": "M.M (Samsung S3)",
"fixtm": 1462360893000,
"addr": "{address}",
"lat": 1.433775,
"lon": 103.7859717,
"spdkm": 0
}
答案 0 :(得分:2)
要同时返回其他字段,您可以在 $last
操作中使用相同的 $group
运算符。这将返回每个组的最后一个文档中的相应字段:
function() {
return db.gpspos.aggregate(
[
{
$sort: {
devid: 1,
fixtm: 1
}
}, {
$group: {
_id: "$devid",
lastData: { $last: "$fixtm" },
speed: { $last: "$spdkm" },
address: { $last: "$address" },
lat: { $last: "$lat" },
lon: { $last: "$lon" }
}
}, {
$project: {
_id: 0,
device_id: '$_id',
fixtime: '$lastData',
speed: 1,
address: 1,
lat: 1,
lon: 1
}
}
]
)
}