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

MongoDB $first Aggregation Pipeline Operator

MongoDB 4.4 memperkenalkan $first operator pipa agregasi.

Operator ini mengembalikan elemen pertama 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 $first untuk mengembalikan elemen pertama dari setiap larik tersebut.

Contoh:

db.players.aggregate([ 
  {
    $project: {
        "firstScore": { 
          $first: "$scores" 
        }
    }
  } 
]) 

Hasil:

{ "_id" :1, "firstScore" :1 }{ "_id" :2, "firstScore" :8 }{ "_id" :3, "firstScore" :15 }

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

Ini sama dengan menggunakan $arrayElemAt operator dengan nilai nol (0 ):

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

Array Kosong

Jika Anda memberikan array kosong, $first 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: {
        "firstScore": { 
          $first: "$scores" 
        }
    }
  } 
]) 

Hasil:

{ "_id" :1, "firstScore" :1 }{ "_id" :2, "firstScore" :8 }{ "_id" :3, "firstScore" :15 }{ "_id" :4 } 

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

Nilai Nol dan Tidak Ada

Jika operan null atau hilang, $first mengembalikan null .

Misalkan kita memasukkan dokumen berikut:

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

Mari kita jalankan kodenya lagi:

db.players.aggregate([ 
  {
    $project: {
        "firstScore": { 
          $first: "$scores" 
        }
    }
  } 
]) 

Hasil:

{ "_id" :1, "firstScore" :1 }{ "_id" :2, "firstScore" :8 }{ "_id" :3, "firstScore" :15 }{ "_id" :4 }{ "_id" :5, "firstScore" :null }

Kali ini mengembalikan bidang dengan nilai null .

Operan Tidak Valid

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

Untuk mendemonstrasikan ini, mari kita coba menggunakan $first melawan player bidang (yang bukan larik):

db.players.aggregate([ 
  {
    $project: {
        "firstPlayer": { 
          $first: "$player" 
        }
    }
  } 
]) 

Hasil:

Kesalahan:perintah gagal:{ "ok" :0, "errmsg" :"Argumen $first 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. Perbarui beberapa elemen dalam array di mongodb

  2. Kueri hierarkis dengan Mongo menggunakan $graphLookup

  3. MongoDB mencocokan beberapa elemen dalam array

  4. Pulihkan Basis Data MongoDB menggunakan mongorestore

  5. Bisakah JSON $dates yang ketat digunakan dalam kueri MongoDB?