mongoDB - 数组值的平均值

时间:2013-06-25 16:19:54

标签: mongodb nosql

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

Document structure

{
   myVar: myValue,
   [...]
   myCoordinates: [
      myLng,
      myLat
   ]
}

所以,我尝试通过查询集合来计算整个文档集合的 myLng myLordinates 数组的平均值 myCoordinates 这个:

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

但不幸的是,它不起作用,并为 lngAvg latAvg 字段返回0值。

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

1 个答案:

答案 0 :(得分:5)

聚合中的位置表示法似乎仍然不受支持,check out this ticket

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

给定数组结构,您可以像这样放松并投影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"}
 }}
]);