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

Pilih nilai terakhir dari array di sub dokumen

Anda memerlukan kerangka kerja agregasi untuk melakukan ini, saya pikir Anda benar-benar harus mengubah strukturnya, tetapi bekerja dengan apa yang Anda miliki:

Model.aggregate(
    [
       { "$match": { "prices.100": { "$exists": true } }},
       { "$unwind": "$prices.100" },
       { "$group": {
          "_id": "$_id",
          "price": { "$last": "$prices.100" }
       }},
       { "$project": { "_id": 0, "prices.100": "$price" } }
     ]
) 

Di rilis mendatang, Anda hanya dapat menggunakan $slice . yang baru operator:

Model.aggregate(
    [
        { "$match": { "prices.100": { "$exists": true } } },
        { "$project": {
            "_id": 0,
            "prices.100": { "$slice": ["$prices.100",-1] }
        }}
    ]
)

Bahkan Anda dapat melakukan "keduanya" pada saat yang sama:

Model.aggregate(
    [
        { "$match": { "prices.100": { "$exists": true } } },
        { "$project": {
            "_id": 0,
            "prices.100": { "$slice": ["$prices.100",-1] },
            "prices.101": { "$slice": ["$prices.100",-1] }
        }}
    ]
)

Dan itu jauh lebih baik daripada memproses dengan $unwind dan $last untuk mendapatkan elemen terakhir dari array ketika $group diterapkan untuk mendapatkan data kembali.

Ini pada dasarnya memiliki kinerja yang sama dengan kueri biasa dalam bentuk yang lebih baru. Dalam bentuk sekarang, itu akan menjadi lebih lambat.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB / Meteor / Ekspor MONGO_URL ke aplikasi yang digunakan

  2. Perbedaan antara menyimpan ObjectId dan bentuk stringnya, di MongoDB

  3. Kendala unik MongoDB/Mongoose pada bidang Tanggal

  4. $in operator mongoDB dengan _id di perl

  5. Cara membuat kueri khusus menggunakan Django-nonrel dan mongodb