MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak uzyskać dostęp do określonego elementu tablicy w agregacji projekcji MongoDB?

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Instalacja MongoDB

  2. Chcę wynik z odrębną wartością jednego pola z mongodb przy użyciu danych wiosennych

  3. Symbol wieloznaczny w notacji Mongodb z kropką?

  4. mongodb:użyj zagnieżdżonego dokumentu lub oddzielnych kolekcji z odniesieniami

  5. Ciąg daty sortowania MongoDB (mm/dd/rrrr)