Fitur yang akan membantu Anda mencapai hal ini belum tersedia. Namun, akan ada operator agregasi baru yang memberikan elemen array untuk indeks tertentu. Ekspresi baru disebut $arrayElemAt
Gunakan operator agregasi baru yang tersedia untuk MongoDB versi 3.2.X
dan lebih besar, ini mengembalikan elemen array untuk indeks yang diberikan. Ekspresi baru disebut $arrayElemAt
. Dibutuhkan dua argumen, array dan indeks dan mengembalikan elemen pada indeks yang diberikan dalam array. Indeks negatif diterima sebagai indeks dari belakang array. Jika indeks di luar batas, ia mengembalikan nilai yang hilang, artinya bidang tidak akan ada di output:
var pipeline = [
{ $match : {"geo" : {$ne: null}}},
{
$project: {
_id: "$id_str",
lat: { $arrayElemAt: ['$geo.coordinates', 0] },
lon: { $arrayElemAt: ['$geo.coordinates', 1] }
}
}
];
Sebagai solusi untuk saat ini (dengan asumsi array koordinat akan selalu memiliki dua elemen pada waktu tertentu), Anda dapat mencoba pipa agregasi berikut yang akan memanfaatkan $first
dan $last
grup akumulator operator untuk mendapatkan elemen setelah $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" }
}
}
];