sql >> Databáze >  >> NoSQL >> MongoDB

Jak získáte přístup ke konkrétní položce pole v agregaci projekce MongoDB?

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" }
        }
    }
];


  1. Pymongo Regex $všechny více hledaných výrazů

  2. Přístupy k ukládání geoprostorových dat v Redis

  3. Mongo agregace, projekt podpole prvního prvku v poli

  4. Použití řazení v mongodb $regex