Funkcja, która pomoże Ci to osiągnąć, nie jest jeszcze dostępna. Pojawi się jednak nowy operator agregacji, który da element tablicy dla danego indeksu. Nowe wyrażenie nazywa się $arrayElemAt
Użyj nowego operatora agregacji, który jest dostępny dla wersji MongoDB 3.2.X
i większe, zwraca element tablicy dla danego indeksu. Nowe wyrażenie nazywa się $arrayElemAt
. Pobiera dwa argumenty, tablicę i indeks i zwraca element o podanym indeksie w tablicy. Indeksy ujemne są akceptowane jako indeksy z tyłu tablicy. Jeśli indeks jest poza zakresem, zwraca brakującą wartość, co oznacza, że pole nie będzie istnieć w danych wyjściowych:
var pipeline = [
{ $match : {"geo" : {$ne: null}}},
{
$project: {
_id: "$id_str",
lat: { $arrayElemAt: ['$geo.coordinates', 0] },
lon: { $arrayElemAt: ['$geo.coordinates', 1] }
}
}
];
Jako obejście na razie (zakładając, że tablica współrzędnych zawsze będzie zawierała dwa elementy w danym momencie), możesz wypróbować następujący potok agregacji, który wykorzysta $first
i $last
operatory akumulatorów grupowych, aby uzyskać elementy 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" }
}
}
];