MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana Anda mengakses item array tertentu dalam agregasi proyeksi MongoDB?

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregasi Data Musim Semi MongoDB - cocokkan dengan nilai yang dihitung

  2. Bagaimana cara menjatuhkan database dengan Mongoose?

  3. Penyortiran kueri MongoDB musim semi

  4. Format ISO Mongo DB

  5. Memutakhirkan basis data mongo yang lebih lama setelah peningkatan versi mongo yang tidak disengaja