mata teras
- MongoDB, pangkalan data NoSQL, memperkenalkan pengendali
- baru dalam versi 3.2, yang boleh melakukan operasi seperti kiri-join pada dua atau lebih set, dengan itu mencapai data yang serupa dengan pangkalan data relasi. Walau bagaimanapun, pengendali ini terhad untuk digunakan dalam operasi agregat, yang lebih kompleks dan biasanya lebih perlahan daripada pertanyaan carian mudah.
$lookup
operator - (masukkan medan carian dalam dokumen),
$lookup
(koleksi yang akan disambungkan),localField
(bidang yang boleh didapati dalam koleksifrom
) danforeignField
(nama medan output). Pengendali ini boleh digunakan dalam pertanyaan agregat untuk memadankan jawatan, menyusun mengikut urutan, mengehadkan bilangan item, sambungkan data pengguna, array pengguna meratakan dan mengembalikan hanya medan yang diperlukan.from
as
Walaupun pengendali MongoDB berguna dan boleh membantu menguruskan sedikit data relasi dalam pangkalan data NoSQL, ia bukan pengganti untuk klausa gabungan yang lebih kuat dalam SQL. Jika dokumen pengguna dipadamkan di MongoDB, dokumen pos yatim akan dikekalkan, menunjukkan kekurangan kekangan. Oleh itu, jika pengendali - sering digunakan, ia mungkin menunjukkan bahawa storan data yang salah digunakan, dan pangkalan data relasi (SQL) mungkin lebih sesuai.
$lookup
$lookup
Salah satu perbezaan terbesar antara pangkalan data SQL dan NoSQL adalah menyertai. Dalam pangkalan data relasi, SQL menyertai klausa membolehkan anda menggabungkan baris dari dua atau lebih jadual menggunakan medan yang sama di antara mereka. Sebagai contoh, jika anda mempunyai jadual buku dan penerbit, anda boleh menulis arahan SQL berikut:
dengan kata lain, jadual buku mempunyai medan penerbit_id yang merujuk medan ID dalam jadual penerbit.
SELECT book.title, publisher.name FROM book LEFT JOIN book.publisher_id ON publisher.id;Ini praktikal kerana penerbit tunggal dapat menyediakan beribu -ribu buku. Jika kita perlu mengemas kini butiran penerbit pada masa akan datang, kita boleh menukar rekod individu. Redundansi data diminimumkan kerana kami tidak perlu mengulangi maklumat penerbit untuk setiap buku. Teknologi ini dipanggil penyeragaman.
pangkalan data SQL menyediakan pelbagai penyeragaman dan kekangan untuk memastikan penyelenggaraan hubungan.
nosql == Tidak bergabung?
Ini tidak selalu berlaku ...
Pangkalan data berorientasikan dokumen (seperti MongoDB) direka untuk menyimpan data de-normal. Sebaik -baiknya, tidak ada hubungan antara set. Jika data yang sama perlu dalam dua atau lebih dokumen, ia mesti diulang.
Ini boleh mengecewakan kerana hampir tidak ada keadaan di mana andatidak akan memerlukan data hubungan. Nasib baik, MongoDB 3.2 memperkenalkan pengendali
baru yang boleh melakukan operasi seperti kiri-Join pada dua atau lebih set. Tetapi ada masalah ...agregasi mongoDB
$lookup
hanya dibenarkan digunakan dalam operasi agregat. Fikirkannya sebagai saluran paip satu siri pengendali yang memohon, penapis dan hasil kumpulan. Output satu pengendali digunakan sebagai input kepada pengendali seterusnya.
Agregasi lebih sukar difahami daripada pertanyaan carian mudah dan biasanya berjalan lebih perlahan. Walau bagaimanapun, mereka berkuasa dan merupakan pilihan yang berharga untuk operasi carian kompleks.
Adalah lebih baik menggunakan contoh untuk menerangkan pengagregatan. Katakan kami membuat platform media sosial dengan koleksi pengguna. Ia menyimpan butiran setiap pengguna dalam dokumen yang berasingan. Contohnya:
SELECT book.title, publisher.name FROM book LEFT JOIN book.publisher_id ON publisher.id;kita boleh menambah seberapa banyak bidang yang kita mahu, tetapi semua dokumen MongoDB memerlukan medan
dengan nilai yang unik. _id
Sama seperti kunci utama SQL, mereka akan dimasukkan secara automatik jika diperlukan. _id
: user_id
{ "_id": ObjectID("45b83bda421238c76f5c1969"), "name": "User One", "email": "userone@email.com", "country": "UK", "dob": ISODate("1999-09-13T00:00:00.000Z") }kami kini ingin memaparkan dua puluh jawatan terakhir yang dinilai "penting" oleh semua pengguna dalam urutan terbalik masa. Setiap dokumen yang dikembalikan hendaklah mengandungi teks, masa jawatan, dan nama dan negara pengguna yang berkaitan.
pertanyaan agregasi MongoDB meluluskan pelbagai operator saluran paip yang menentukan setiap operasi dalam urutan. Pertama, kita perlu menggunakan penapis
untuk mengekstrak semua dokumen dengan penilaian yang betul dari koleksi pos: $match
{ "_id": ObjectID("17c9812acff9ac0bba018cc1"), "user_id": ObjectID("45b83bda421238c76f5c1969"), "date": ISODate("2016-09-05T03:05:00.123Z"), "text": "My life story so far", "rating": "important" }kita kini perlu menyusun item yang sepadan dengan urutan terbalik dengan menggunakan pengendali
: $sort
{ "$match": { "rating": "important" } }Oleh kerana kita hanya memerlukan dua puluh jawatan, kita boleh menggunakan peringkat
supaya MongoDB hanya perlu memproses data yang kita mahu: $limit
{ "$sort": { "date": -1 } }kini kita boleh menggunakan operator
baru untuk menyambungkan data dari koleksi pengguna. Ia memerlukan objek dengan empat parameter: $lookup
- : Masukkan medan carian dalam dokumen
localField
- : koleksi yang akan disambungkan
from
- : bidang yang terdapat dalam koleksi
foreignField
from
- : Nama medan output.
as
{ "$limit": 20 }Ini akan mewujudkan medan baru dalam output kami yang dipanggil
. Ia mengandungi array di mana setiap nilai sepadan dengan dokumen pengguna: userinfo
{ "$lookup": { "localField": "user_id", "from": "user", "foreignField": "_id", "as": "userinfo" } }Kami mempunyai hubungan satu sama lain
dan post.user_id
kerana jawatan hanya boleh mempunyai satu pengarang. Oleh itu, array user._id
kami akan sentiasa mengandungi hanya satu item. Kita boleh menggunakan pengendali userinfo
untuk memecahkannya ke dalam subdokumen: $unwind
"userinfo": [ { "name": "User One", ... } ]output kini akan ditukar kepada format yang lebih praktikal, dengan pengendali lain yang tersedia untuk memohon:
{ "$unwind": "$userinfo" }Akhirnya, kita boleh menggunakan peringkat
dalam saluran paip untuk mengembalikan teks, masa pos, nama pengguna dan negara: $project
SELECT book.title, publisher.name FROM book LEFT JOIN book.publisher_id ON publisher.id;
Letakkan semuanya bersama -sama
pertanyaan agregat akhir kami sepadan dengan catatan, macam -macam dalam urutan, had ke dua puluh item terkini, menghubungkan data pengguna, meratakan susunan pengguna dan mengembalikan hanya medan yang diperlukan. Perintah Lengkap:
{ "_id": ObjectID("45b83bda421238c76f5c1969"), "name": "User One", "email": "userone@email.com", "country": "UK", "dob": ISODate("1999-09-13T00:00:00.000Z") }
Hasilnya adalah koleksi sehingga dua puluh dokumen. Contohnya:
{ "_id": ObjectID("17c9812acff9ac0bba018cc1"), "user_id": ObjectID("45b83bda421238c76f5c1969"), "date": ISODate("2016-09-05T03:05:00.123Z"), "text": "My life story so far", "rating": "important" }hebat! Saya akhirnya boleh beralih ke NoSQL!
MongoDB
berguna dan berkuasa, tetapi juga contoh asas ini memerlukan pertanyaan agregasi yang kompleks. Ia tidak dapat menggantikan klausa gabungan yang lebih kuat dalam SQL. MongoDB juga tidak memberikan kekangan; $lookup
harus jarang diperlukan. Sekiranya anda memerlukannya dengan kerap, anda mungkin menggunakan kedai data yang salah ... $lookup
Jika anda mempunyai data hubungan, sila gunakan pangkalan data hubungan (SQL)!iaitu,
adalah tambahan yang popular kepada MongoDB 3.2. Ia mengatasi beberapa masalah yang lebih mengecewakan apabila menggunakan sedikit data relasi dalam pangkalan data NoSQL. $lookup
Apakah perbezaan antara sambungan SQL dan sambungan MongoDB?
Dalam pangkalan data SQL, operasi sambungan menggabungkan baris dari dua atau lebih jadual berdasarkan lajur yang berkaitan di antara mereka. Walau bagaimanapun, MongoDB, sebagai pangkalan data NoSQL, tidak menyokong sambungan SQL tradisional. Sebaliknya, MongoDB menyediakan dua cara untuk melakukan operasi yang sama: tahap
dan tahap $lookup
dalam pengagregatan. Kaedah ini membolehkan anda menggabungkan data dari pelbagai koleksi ke dalam satu set hasil. $graphLookup
Bagaimanakah tahap
Tahap $lookup
di MongoDB membolehkan anda menyambungkan dokumen dari koleksi lain (koleksi "disambungkan") dan tambahkan dokumen yang disambungkan ke dokumen input. Fasa
menentukan koleksi "dari", "Localfield" dan "Foreignfield" untuk memadankan dokumen, dan bidang "As" untuk mengeluarkan dokumen. Ia sama dengan gabungan luar kiri di SQL, mengembalikan semua dokumen dari koleksi input dan dokumen yang sepadan dari koleksi "Dari".
$lookup
Bolehkah saya melakukan carian rekursif menggunakan sambungan MongoDB? $lookup
untuk carian rekursif. Peringkat
melakukan carian rekursif pada set yang ditentukan dan boleh memilih untuk mengehadkan kedalaman dan keluasan carian. Ia berguna untuk menanyakan data hierarki atau graf di mana bilangan tahap tidak diketahui atau mungkin berubah.
$graphLookup
Bagaimana untuk mengoptimumkan prestasi apabila menggunakan sambungan MongoDB? $graphLookup
[ 🎜> peringkat
peringkat untuk menapis dan menukar dokumen.
Bolehkah saya menyambungkan pelbagai koleksi di MongoDB?
Ya, anda boleh menyambungkan pelbagai koleksi MongoDB dengan menghubungkan pelbagai $lookup
peringkat dalam saluran paip agregasi. Setiap peringkat $lookup
menambah dokumen yang disambungkan dari koleksi lain ke dokumen input.
Bagaimana menangani nilai null atau hilang semasa menggunakan sambungan MongoDB?
Apabila menggunakan sambungan MongoDB, jika dokumen dalam koleksi input tidak sepadan dengan mana -mana dokumen dalam koleksi "Dari", fasa $lookup
menambah array kosong ke medan "As". Anda boleh mengendalikan nilai null atau hilang ini dengan menambahkan fasa $lookup
selepas fasa $match
untuk menyaring dokumen dengan medan kosong "sebagai".
Bolehkah saya menggunakan sambungan mongoDB dengan koleksi sharded?
Bermula dari MongoDB 3.6, peringkat $lookup
dan $graphLookup
boleh menerima set sharded untuk menjadi "dari" set. Walau bagaimanapun, disebabkan oleh overhead rangkaian tambahan, prestasi mungkin tidak sebaik koleksi tidak dicukur.
bagaimana menyusun dokumen yang disambungkan di MongoDB?
Anda boleh menyusun dokumen yang disambungkan di MongoDB dengan menambahkan fasa $lookup
selepas fasa $sort
dalam saluran paip pengagregatan. Peringkat $sort
menyusun dokumen dalam medan yang ditentukan dalam urutan menaik atau menurun.
Bolehkah saya menggunakan sambungan MongoDB dengan find()
kaedah?
Tidak, sambungan MongoDB tidak boleh digunakan dengan kaedah find()
. Tahap $lookup
dan $graphLookup
adalah sebahagian daripada rangka kerja agregasi yang menyediakan keupayaan pemprosesan data yang lebih maju daripada kaedah find()
.
Bagaimana untuk menyahpepijat atau menyelesaikan kegagalan sambungan MongoDB?
Untuk debug atau selesaikan kegagalan sambungan MongoDB, anda boleh menggunakan kaedah explain()
untuk menganalisis pelan pelaksanaan saluran paip agregat. Kaedah explain()
menyediakan maklumat terperinci mengenai panggung, termasuk bilangan dokumen yang diproses, masa yang dibelanjakan, dan penggunaan indeks.
Atas ialah kandungan terperinci Menggunakan Join In MongoDB NoSQL Pangkalan Data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Program perintis ini, kerjasama antara CNCF (Yayasan Pengkomputeran Native Cloud), pengkomputeran ampere, equinix metal, dan digerakkan, menyelaraskan ARM64 CI/CD untuk projek GitHub CNCF. Inisiatif ini menangani kebimbangan keselamatan dan prestasi lim

Pengimbas kelemahan rangkaian berasaskan GO ini dengan cekap mengenal pasti kelemahan keselamatan yang berpotensi. Ia memanfaatkan ciri konkurensi Go untuk kelajuan dan termasuk pengesanan perkhidmatan dan pemadanan kelemahan. Mari kita meneroka keupayaan dan etika

Pembinaan laman web hanyalah langkah pertama: kepentingan SEO dan backlinks Membina laman web hanyalah langkah pertama untuk mengubahnya menjadi aset pemasaran yang berharga. Anda perlu melakukan pengoptimuman SEO untuk meningkatkan keterlihatan laman web anda di enjin carian dan menarik pelanggan yang berpotensi. Backlinks adalah kunci untuk meningkatkan kedudukan laman web anda, dan ia menunjukkan Google dan enjin carian lain kuasa dan kredibiliti laman web anda. Tidak semua pautan balik bermanfaat: mengenal pasti dan mengelakkan pautan yang berbahaya Tidak semua pautan balik bermanfaat. Pautan yang berbahaya boleh membahayakan kedudukan anda. Pemeriksaan backlink percuma yang sangat baik memantau sumber pautan ke laman web anda dan mengingatkan anda tentang pautan yang berbahaya. Di samping itu, anda juga boleh menganalisis strategi pautan pesaing anda dan belajar dari mereka. Alat Pemeriksaan Backlink Percuma: Pegawai Perisikan SEO anda


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)