Funkce, která vám toho pomůže dosáhnout, zatím není k dispozici. Bude však existovat nový operátor agregace, který poskytuje prvek pole pro daný index. Nový výraz se nazývá $arrayElemAt
Použijte nový operátor agregace, který je dostupný pro MongoDB verze 3.2.X
a větší, vrátí prvek pole pro daný index. Nový výraz se nazývá $arrayElemAt
. Vezme dva argumenty, pole a index, a vrátí prvek na daném indexu v poli. Záporné indexy jsou přijímány jako indexy ze zadní části pole. Pokud je index mimo meze, vrátí chybějící hodnotu, což znamená, že pole nebude ve výstupu existovat:
var pipeline = [
{ $match : {"geo" : {$ne: null}}},
{
$project: {
_id: "$id_str",
lat: { $arrayElemAt: ['$geo.coordinates', 0] },
lon: { $arrayElemAt: ['$geo.coordinates', 1] }
}
}
];
Jako řešení pro tuto chvíli (za předpokladu, že pole souřadnic bude mít vždy dva prvky v kteroukoli danou chvíli), můžete vyzkoušet následující agregační kanál, který bude využívat výhod $first
a $last
seskupit operátory akumulátorů, aby získali prvky po $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" }
}
}
];