Pertama, selamat datang di MongoDB!
Hal yang perlu diingat adalah bahwa MongoDB menggunakan pendekatan "NoSQL" untuk penyimpanan data, jadi hilangkan pikiran memilih, bergabung, dll. Dari pikiran Anda. Cara penyimpanan data Anda dalam bentuk dokumen dan koleksi, yang memungkinkan cara dinamis untuk menambahkan dan memperoleh data dari lokasi penyimpanan Anda.
Karena itu, untuk memahami konsep di balik parameter $ unwind, pertama-tama Anda harus memahami kasus penggunaan yang coba Anda kutip. Contoh dokumen dari mongodb.org adalah sebagai berikut:
{
title : "this is my title" ,
author : "bob" ,
posted : new Date () ,
pageViews : 5 ,
tags : [ "fun" , "good" , "fun" ] ,
comments : [
{ author :"joe" , text : "this is cool" } ,
{ author :"sam" , text : "this is bad" }
],
other : { foo : 5 }
}
Perhatikan bagaimana tag sebenarnya adalah larik 3 item, dalam hal ini menjadi "menyenangkan", "baik", dan "menyenangkan".
Apa yang dilakukan $ unwind adalah memungkinkan Anda mengupas dokumen untuk setiap elemen dan mengembalikan dokumen yang dihasilkan. Untuk memikirkan ini dalam pendekatan klasik, itu akan menjadi ekuivalen dengan "untuk setiap item dalam larik tag, kembalikan dokumen dengan hanya item itu".
Jadi, hasil dari menjalankan sebagai berikut:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
akan mengembalikan dokumen-dokumen berikut:
{
"result" : [
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "good"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
}
],
"OK" : 1
}
Perhatikan bahwa satu-satunya hal yang berubah dalam larik hasil adalah apa yang dikembalikan dalam nilai tag. Jika Anda memerlukan referensi tambahan tentang cara kerjanya, saya telah menyertakan tautan di sini . Semoga ini membantu, dan semoga berhasil dengan Anda terjun ke salah satu sistem NoSQL terbaik yang pernah saya temui sejauh ini.
Sesuai dokumentasi resmi mongodb:
$ unwind Mendekonstruksi bidang array dari dokumen masukan ke keluaran dokumen untuk setiap elemen. Setiap dokumen keluaran adalah dokumen masukan dengan nilai bidang larik diganti dengan elemen.
Penjelasan melalui contoh dasar:
Inventaris koleksi memiliki dokumen-dokumen berikut:
Operasi $ unwind berikut ini setara dan mengembalikan dokumen untuk setiap elemen di bidang ukuran . Jika bidang ukuran tidak menyelesaikan array tetapi tidak hilang, null, atau array kosong, $ unwind memperlakukan operan non-array sebagai array elemen tunggal.
atau
Di atas keluaran kueri:
Mengapa ini dibutuhkan?
$ unwind sangat berguna saat melakukan agregasi. itu memecah dokumen kompleks / bersarang menjadi dokumen sederhana sebelum melakukan berbagai operasi seperti penyortiran, searcing, dll.
Untuk mengetahui lebih banyak tentang $ bersantai:
https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/
Untuk mengetahui lebih banyak tentang agregasi:
https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
sumber
pertimbangkan contoh di bawah ini untuk memahami Data ini dalam koleksi
Kueri - db.test1.aggregate ([{$ unwind: "$ size"}]);
keluaran
sumber
Izinkan saya menjelaskan dengan cara yang berkaitan dengan cara RDBMS. Ini pernyataannya:
untuk diterapkan ke dokumen / catatan :
The $ Proyek / Pilih hanya mengembalikan ini bidang / kolom sebagai
Berikutnya adalah bagian menyenangkan dari Mongo, anggap larik ini
tags : [ "fun" , "good" , "fun" ]
sebagai tabel terkait lainnya (tidak bisa menjadi tabel pencarian / referensi karena nilai memiliki beberapa duplikasi) bernama "tag". Ingat SELECT umumnya menghasilkan hal-hal vertikal, jadi melepaskan "tag" adalah dengan membagi () vertikal menjadi "tag" tabel.Hasil akhir dari $ project + $ unwind:
Terjemahkan keluaran ke JSON:
Karena kami tidak memberi tahu Mongo untuk menghilangkan kolom "_id", jadi kolom itu otomatis ditambahkan.
sumber