他们以任何方式只获取数组的第一个元素,使用$ addToSet在$ group聚合管道中创建数组
我的聚合查询如下:
db.event.aggregate([
{
$group:
{
_id:{"City":"$TracInfo.City"},
"EventCount":{"$sum":1},
"Latitude":{"$addToSet":"$TracInfo.Longitude"},
"Longitude":{"$addToSet":"$TracInfo.Latitude"}
}
},
{
$project:
{
"_id":"$_id.City",
"EventCount":"$EventCount",
"Latitude":"$Latitude",
"Longitude":"$Longitude"
}
}]).pretty()
这里为Latitude,Longitude我得到一个数组。我只想在每个地图上显示一个城市的单个值。
我在$ Latitude和$ Longitude上尝试了$ max。
错误:"例外:无效的运营商' $ max'", 我甚至试过pop
"Latitude":{"$pop":{"$Latitude":-1}}
错误:"例外:无效的运营商' $ pop'"
谢谢!!提前
答案 0 :(得分:1)
如果您不关心自己将要获得的订单或价值,则应使用$first运营商。它将返回group
操作中匹配的第一个值。
$group:
{
_id:{"City":"$TracInfo.City"},
"EventCount":{"$sum":1},
"Latitude":{"$first":"$TracInfo.Longitude"},
"Longitude":{"$first":"$TracInfo.Latitude"}
}
}
答案 1 :(得分:1)
在执行任何操作(例如获取第一个项目)之前,您基本上需要 $unwind
数组。但另一个问题是 $addToSet
不保持结果的顺序,因此第一项不一定是“最高”或“最低”,您需要 $sort
:
或者只使用 $first
:
db.event.aggregate([
{ "$group": {
"_id": "$TracInfo.City"
"EventCount":{"$sum":1},
"Latitude":{"$addToSet":"$TracInfo.Longitude"},
"Longitude":{"$addToSet":"$TracInfo.Latitude"}
}},
{ "$unwind": "$Longitude" },
{ "$group": {
"_id": "$_id",
"EventCount":{"$first": "$EventCount"},
"Latitude":{ "$first": "$Latitude" },
"Longitude":{ "$first": "$Longtitude" }
}},
{ "$unwind": "$Latitude" },
{ "$group": {
"_id": "$_id",
"EventCount":{"$first": "$EventCount"},
"Latitude":{ "$first": "$Latitude" },
"Longitude":{ "$first": "$Longtitude" }
}}
])
在缩小为“设置”后,您可以获得结果。
或订购:
db.event.aggregate([
{ "$group": {
"_id": "$TracInfo.City"
"EventCount":{"$sum":1},
"Latitude":{"$addToSet":"$TracInfo.Longitude"},
"Longitude":{"$addToSet":"$TracInfo.Latitude"}
}},
{ "$unwind": "$Longitude" },
{ "$sort": { "_id": 1, "Longtitude": 1 },
{ "$group": {
"_id": "$_id",
"EventCount":{"$first": "$EventCount"},
"Latitude":{ "$first": "$Latitude" },
"Longitude":{ "$first": "$Longtitude" }
}},
{ "$unwind": "$Latitude" },
{ "$sort": { "_id": 1, "Latitude": 1 },
{ "$group": {
"_id": "$_id",
"EventCount":{"$first": "$EventCount"},
"Latitude":{ "$first": "$Latitude" },
"Longitude":{ "$first": "$Longtitude" }
}}
])
我还假设您打算交换这些字段的值。