Javascript 获取投影中数组的第一个值,使用$addToSet mongodb创建的数组?
如果仅获取数组的第一个元素,则使用$addToSet在聚合的$group管道中创建数组 我的汇总查询如下:Javascript 获取投影中数组的第一个值,使用$addToSet mongodb创建的数组?,javascript,mongodb,aggregation-framework,Javascript,Mongodb,Aggregation Framework,如果仅获取数组的第一个元素,则使用$addToSet在聚合的$group管道中创建数组 我的汇总查询如下: db.event.aggregate([ { $group: { _id:{"City":"$TracInfo.City"}, "EventCount":{"$sum":1}, "Latitude":{"$addToSet":"$TracInfo.Longitude"}, "Longitude":{"$addToSet
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()
这里是纬度,经度,我得到一个数组。我只想从每个城市中取一个值,在地理地图上显示城市
我在$纬度和$经度上尝试了$max
错误:“异常:无效的运算符“$max”,
我甚至试过流行音乐
"Latitude":{"$pop":{"$Latitude":-1}}
错误:“异常:无效的运算符“$pop”
谢谢!!提前如果您不关心将要获得的顺序或值,则应使用运算符。它将返回
组
操作中匹配的第一个值
$group:
{
_id:{"City":"$TracInfo.City"},
"EventCount":{"$sum":1},
"Latitude":{"$first":"$TracInfo.Longitude"},
"Longitude":{"$first":"$TracInfo.Latitude"}
}
}
基本上,您需要在执行任何操作(例如获取第一项)之前,
$unwind
阵列。但是这里的另一个问题是,$addToSet
不维护结果的顺序,因此第一项不一定是“最高”或“最低”,您还需要$sort
:
或者只使用$first:
db.event.aggregate([
{“$组”:{
“\u id”:“$TracInfo.City”
“EventCount”:{“$sum”:1},
“纬度”:{“$addToSet”:“$TracInfo.Longitude”},
“经度”:{“$addToSet”:“$TracInfo.Latitude”}
}},
{“$展开”:“$经度”},
{“$组”:{
“\u id”:“$\u id”,
“EventCount”:{“$first”:“$EventCount”},
“纬度”:{“$first”:“$LATIONE”},
“经度”:{“$first”:“$longtudent”}
}},
{“$REWIND”:“$LATIONE”},
{“$组”:{
“\u id”:“$\u id”,
“EventCount”:{“$first”:“$EventCount”},
“纬度”:{“$first”:“$LATIONE”},
“经度”:{“$first”:“$longtudent”}
}}
])
这会在你缩小到一个“集合”后得到结果
或订购:
db.event.aggregate([
{“$组”:{
“\u id”:“$TracInfo.City”
“EventCount”:{“$sum”:1},
“纬度”:{“$addToSet”:“$TracInfo.Longitude”},
“经度”:{“$addToSet”:“$TracInfo.Latitude”}
}},
{“$展开”:“$经度”},
{“$sort”:{“_id”:1,“longtudity”:1},
{“$组”:{
“\u id”:“$\u id”,
“EventCount”:{“$first”:“$EventCount”},
“纬度”:{“$first”:“$LATIONE”},
“经度”:{“$first”:“$longtudent”}
}},
{“$REWIND”:“$LATIONE”},
{“$sort”:{“_id”:1,“纬度”:1},
{“$组”:{
“\u id”:“$\u id”,
“EventCount”:{“$first”:“$EventCount”},
“纬度”:{“$first”:“$LATIONE”},
“经度”:{“$first”:“$longtudent”}
}}
])
我还假设您打算交换这些字段的值。第一个是什么意思?您可能希望对其进行排序,但
$addToSet
不会对结果进行排序。因此,我们必须对其进行排序。但排序的依据是什么?以及“第一”是“最高”还是“最低”这些值中的哪一个?我指的是数组的第一个值,不是我需要的第一个值,但我只需要数组中的一个值,因为现在它在投影中返回一个数组,我需要该数组中的任何一个值,它可以是该数组的第一个值或最后一个最大值。为了得到一个具体的答案,我提到了数组的第一个值(数组纬度和经度)谢谢!所以现在他们不需要为其创建数组并尝试从中查找。谢谢!!您的答案对于我的聚合查询非常完美