Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取投影中数组的第一个值,使用$addToSet mongodb创建的数组?_Javascript_Mongodb_Aggregation Framework - Fatal编程技术网

Javascript 获取投影中数组的第一个值,使用$addToSet mongodb创建的数组?

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

如果仅获取数组的第一个元素,则使用$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()
这里是纬度,经度,我得到一个数组。我只想从每个城市中取一个值,在地理地图上显示城市

我在$纬度和$经度上尝试了$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
不会对结果进行排序。因此,我们必须对其进行排序。但排序的依据是什么?以及“第一”是“最高”还是“最低”这些值中的哪一个?我指的是数组的第一个值,不是我需要的第一个值,但我只需要数组中的一个值,因为现在它在投影中返回一个数组,我需要该数组中的任何一个值,它可以是该数组的第一个值或最后一个最大值。为了得到一个具体的答案,我提到了数组的第一个值(数组纬度和经度)谢谢!所以现在他们不需要为其创建数组并尝试从中查找。谢谢!!您的答案对于我的聚合查询非常完美