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

MongoDB $Operator Pipa Agregasi Terakhir

MongoDB 4.4 memperkenalkan $last operator pipa agregasi.

Operator ini mengembalikan elemen terakhir dalam larik.

Contoh

Misalkan kita memiliki koleksi yang disebut pemain dengan dokumen berikut:

{ "_id" :1, "player" :"Homer", "skor" :[ 1, 5, 3 ] }{ "_id" :2, "player" :"Marge", "skor" :[ 8, 17, 18 ] }{ "_id" :3, "player" :"Bart", "skor" :[ 15, 11, 8 ] }

Kita dapat melihat bahwa setiap dokumen memiliki scores bidang yang berisi array.

Kita bisa menggunakan $last untuk mengembalikan elemen terakhir dari setiap larik tersebut.

Contoh:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
]) 

Hasil:

{ "_id" :1, "lastScore" :3 }{ "_id" :2, "lastScore" :18 }{ "_id" :3, "lastScore" :8 }

Kita dapat melihat bahwa elemen terakhir dari array dikembalikan untuk setiap dokumen.

Ini sama dengan menggunakan $arrayElemAt operator dengan nilai -1 :

db.players.aggregate([
  {
    $project: {
      "firstScore": { $arrayElemAt: [ "$scores", -1 ] }
    }
  }
]) 

Array Kosong

Jika Anda memberikan array kosong, $last tidak akan mengembalikan nilai.

Misalkan kita memasukkan dokumen berikut ke dalam koleksi kita:

{ "_id" :4, "player" :"Farnsworth", "skor" :[ ] }

Mari kita jalankan kodenya lagi:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
]) 

Hasil:

{ "_id" :1, "lastScore" :3 }{ "_id" :2, "lastScore" :18 }{ "_id" :3, "lastScore" :8 }{ "_id" :4 } 

Dalam hal ini, dokumen 4 tidak mengembalikan nilai apa pun untuk array. Itu bahkan tidak mengembalikan nama bidang.

Nilai Nol dan Tidak Ada

Jika operan null atau hilang, $last mengembalikan null .

Misalkan kita memasukkan dokumen berikut:

{ "_id" :5, "player" :"Meg", "skor" :null }

Mari kita jalankan kodenya lagi:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
]) 

Hasil:

{ "_id" :1, "lastScore" :3 }{ "_id" :2, "lastScore" :18 }{ "_id" :3, "lastScore" :8 }{ "_id" :4 }{ "_id" :5, "lastScore" :null }

Kali ini mengembalikan bidang dengan nilai null .

Operan Tidak Valid

Operan untuk $last harus diselesaikan ke array, null, atau hilang. Memberikan operan yang tidak valid menghasilkan kesalahan.

Untuk mendemonstrasikannya, mari kita coba menggunakan $last melawan player bidang (yang bukan larik):

db.players.aggregate([ 
  {
    $project: {
        "lastPlayer": { 
          $last: "$player" 
        }
    }
  } 
]) 

Hasil:

Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"Argumen $last harus berupa array, tetapi berupa string", "code" :28689, "codeName" :"Location28689"} :agregat gagal :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:618:17example @sqldat.com/mongo/shell/assert.js:708:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1046:12@( cangkang)::1:1

Seperti yang diharapkan, itu mengembalikan kesalahan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mendapatkan kembali ruang yang dihapus tanpa `db.repairDatabase()`?

  2. Bagaimana ClusterControl Melakukan Pemulihan dan Kegagalan Basis Data Otomatis

  3. Luwak, temukan, kembalikan properti tertentu

  4. MongoDB Ruby Driver 2.5.x Masalah Sensitivitas Huruf Besar dengan Nama Host pada Kumpulan Replika

  5. Bagaimana MongoDb diinstal oleh Meteor?