获取Mongo DB $组中的特定元素

时间:2015-04-27 13:23:22

标签: mongodb mongodb-query

我正在测试Mongo 2.6和拉链样本数据,我希望能够在查询时使用纬度或经度并使用聚合框架,这是我拼凑在一起的一个例子:

db.zips.aggregate([{
  $project: {
    _id: 1,
    city: 1,
    loc: 1
  }
}, {
  $unwind: '$loc'
}, {
  $group: {
    "_id": "$_id",
    "city": {
      $first: "$city"
    },
    "lat": {
      $first: "$loc"
    }
  }
}])

$slice完全符合我的要求,而不是$ unwind和$ group,因为我只是想从数组中提取一个特定的字段,但是你不能在聚合框架中使用它。

所以当我分组时$unwind似乎相似,问题是$first非常适合拾取第一个元素,而技术上它是一个2元素块,我可以使用$last ,但如果是> 2个元素,我怎么告诉它我想要2nd元素?

===编辑===

https://jira.mongodb.org/browse/SERVER-4589

我发现这与我所追求的一致并且显然已经被打破,所以我认为我已经走到了尽头。仍然愿意接受建议。

1 个答案:

答案 0 :(得分:0)

我知道你想在聚合函数中使用它,但我不确定它是否可行。您可以在MapReduce函数中执行此操作。它使您可以更灵活地处理数据。

以下是一个查询,您可以选择示例中的字段:

db.runCommand({
  "mapreduce" : "zips",
  "map" : function() {
    emit(this._id, {
      city: this.city, 
      lat: this.loc[0], // First array elem
      long: this.loc[1] // Second array elem
    });
  },
  "reduce" : function(key, values) { return values[0]; }, 
  "out": { inline: 1 }
});

我在这里没有做任何实际的减少,因为你没有在你的问题中这样做。如果需要,您可以编辑reduce函数。