mongoDB - 数组值的平均值

Doc*_*aux 3 mongodb nosql

我正在尝试为我的集合中的每个文档计算数组的每个值的平均聚合操作.

Document structure

{
   myVar: myValue,
   [...]
   myCoordinates: [
      myLng,
      myLat
   ]
}
Run Code Online (Sandbox Code Playgroud)

因此,我试图通过查询集合来计算整个文档集合的myCoordinates数组的myLngmyLat值的平均值,如下所示:

myColl.aggregate([{
   $group: {
       _id: 0,
       lngAvg: { $avg: "$myCoordinates.0" },
       latAvg: { $avg: "$myCoordinates.1" }
   }
}])
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它不起作用,并为lngAvglatAvg字段返回值0 .

你有什么想法吗?这至少可行吗?

num*_*407 5

聚合中的位置表示法似乎仍然不受支持,请查看此票证.

正如@Sammaye所说,你需要首先解开数组,或者用嵌入lng/ lat嵌入的doc 替换你的坐标数组,这会使这个变得微不足道.

给定数组结构,您可以像这样放松并投影lat/lng:

myColl.aggregate([
 // unwind the coordinates into separate docs
 {$unwind: "$myCoordinates"},

 // group back into single docs, projecting the first and last
 // coordinates as lng and lat, respectively
 {$group: {
   _id: "$_id",
   lng: {$first: "$myCoordinates"},
   lat: {$last: "$myCoordinates"}
 }},

 // then group as normal for the averaging
 {$group: {
   _id: 0,
   lngAvg: {$avg: "$lng"},
   latAvg: {$avg: "$lat"}
 }}
]);
Run Code Online (Sandbox Code Playgroud)