gpt4 book ai didi

mongodb - 获取 Mongo DB $group 中的特定元素

转载 作者:可可西里 更新时间:2023-11-01 09:16:50 24 4
gpt4 key购买 nike

我正在使用 Mongo 2.6 和 zips 示例数据进行测试,我希望能够在查询和使用聚合框架时获得纬度或经度,这是我拼凑的一个示例:

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 元素 block 我可以使用 $last,但如果它是 > 2 个元素,我该如何告诉它我想要 2nd 元素?

===编辑===

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

我发现这与我所追求的一致,但显然仍然存在问题,所以我认为我进入了死胡同。尽管如此,仍然愿意接受建议。

最佳答案

我知道您希望在聚合函数中使用它,但我不确定是否可行。您可以改为在 MapReduce 函数中执行此操作。它为您处理数据提供了更大的灵 active 。

这是一个选择字段的查询,就像您在示例中所追求的那样:

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 函数。

关于mongodb - 获取 Mongo DB $group 中的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com