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 :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:618:17example @sqldat.com/mongo/shell/assert.js:708:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1046:12@( cangkang)::1:1
Seperti yang diharapkan, itu mengembalikan kesalahan.