Ste*_*hen 6 mongodb aggregation-framework
我正在尝试在 MongoDB 聚合函数中创建投影,请参阅以下内容:
[
{$match : {"geo" : {$ne: null}}},
{$project : {"id" : "$id_str", lat: "$geo.coordinates.0", lon: "$geo.coordinates.1"}}
]
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,它不会传递数组项,它只是将一个空数组投影到属性 lat 和 lon。
这里需要什么?我查看了文档但无法弄清楚,甚至尝试了 $unwind 和 $group 的排列但没有成功。
可帮助您实现此目标的功能尚不可用。但是,将有一个新的聚合运算符为给定索引提供数组元素。新的表达式被称为$arrayElemAt
使用适用于 MongoDB3.2.X及更高版本的新聚合运算符,这将返回给定索引的数组元素。新表达式称为$arrayElemAt。它接受两个参数,一个数组和一个索引,并返回数组中给定索引处的元素。负索引被接受为数组后面的索引。如果索引越界,则返回缺失值,这意味着该字段将不存在于输出中:
var pipeline = [
{ $match : {"geo" : {$ne: null}}},
{
$project: {
_id: "$id_str",
lat: { $arrayElemAt: ['$geo.coordinates', 0] },
lon: { $arrayElemAt: ['$geo.coordinates', 1] }
}
}
];
Run Code Online (Sandbox Code Playgroud)
作为现在的解决方法(假设坐标数组在任何给定时间总是有两个元素),您可以尝试以下聚合管道,它将利用$first和$lastgroup 累加器运算符在 a 之后获取元素$sort:
var pipeline = [
{$match : {"geo" : {$ne: null}}},
{ "$unwind": "$geo.coordinates" },
{ "$sort": {"geo.coordinates": 1} } ,
{
"$group": {
"_id": "$_id",
"lat": { "$first": "$geo.coordinates" },
"lon": { "$last": "$geo.coordinates" }
}
}
];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |