Bagaimana cara membuat kueri bersarang di mongodb?
Sekarang pertanyaannya adalah bagaimana mendapatkan array userid di operator $in yang diekstrak dengan kueri sehingga seluruh kueri dapat dibuat dengan satu permintaan Show "Kueri bersarang" seperti ini tidak berfungsi
Memberikan kesalahan ini 1) apakah ini mungkin di mongodb dan bagaimana caranya? 2) bagaimana melakukan ini dengan driver c# resmi? Solusi terbaikJawaban atas pertanyaan semacam itu di MongoDB sering kali adalah mendenormalisasi data Anda. Jika Anda hanya memerlukan daftar pengguna dalam grup, Anda dapat menyimpan ID pengguna dan Nama pengguna dalam dokumen grup. Dalam beberapa hal Anda menyusun database Anda sesuai dengan hasil yang ingin Anda lihat di layar daripada mencoba memasukkannya ke dalam format yang dinormalisasi Jelas itu hanya akan berfungsi jika daftar grup pengguna Anda (dengan nama) dapat ditampung dalam satu dokumen, tetapi pendekatan Anda saat ini juga memiliki beberapa batasan terkait ukuran maksimum grup Pendekatan lain adalah dengan menyimpan grup yang dimiliki pengguna dalam larik pada setiap dokumen 'Pengguna'. Tambahkan indeks pada bidang larik itu dan sekarang Anda dapat menemukan pengguna berdasarkan grup. Mengingat bahwa pengguna cenderung menjadi anggota grup yang lebih sedikit daripada jumlah anggota dalam grup, ini mungkin pendekatan terbaik di sini _Sekali lagi Anda dapat menyimpan nama grup dengan _id-nya sehingga Anda dapat segera menampilkan daftar grup yang dimiliki pengguna dengan sekali jalan pulang pergi. Tentu saja, jika Anda mengizinkan perubahan nama grup, Anda harus memulai tugas latar belakang untuk memperbaiki semua salinan nama ini Saya juga akan menggunakan generator id MongoDB bawaan daripada milik Anda, ia memiliki banyak properti yang diinginkan Solusi TerkaitMongodb – Cara melakukan SQL Join yang setara di MongoDBPada Mongo 3. 2 jawaban atas pertanyaan ini sebagian besar tidak lagi benar. Operator $lookup baru yang ditambahkan ke pipa agregasi pada dasarnya identik dengan gabungan luar kiri Dari dokumen
Tentu saja Mongo bukan basis data relasional, dan pengembang berhati-hati untuk merekomendasikan kasus penggunaan khusus untuk $lookup, tetapi setidaknya pada 3. 2 bergabung sekarang dimungkinkan dengan MongoDB Sql – Cara menanyakan MongoDB dengan "suka"Itu pasti
Atau, serupa _Anda sedang mencari sesuatu yang berisi "m" di suatu tempat (Operator ' Catatan. MongoDB menggunakan ekspresi reguler yang lebih kuat daripada "SEPERTI" di SQL. Dengan ekspresi reguler, Anda dapat membuat pola apa pun yang Anda bayangkan MongoDB adalah database NoSQL berorientasi dokumen sumber terbuka. Kami telah memperkenalkan cara menggunakan Sebelum kita memulai perjalanan lanjutan ini, kita harus memiliki server MongoDB. Anda dapat menggunakan Docker untuk memulai server MongoDB dalam wadah, atau menggunakan MongoDB Atlas untuk memulai server yang dihosting dan dikelola oleh Atlas. Untuk kesederhanaan, kami akan menggunakan wadah Docker di posting ini, tetapi Anda bebas memilih yang Anda sukai. Perintah untuk memulai wadah Docker untuk MongoDB adalah $ docker network create mongo-net$ docker run --detach --network mongo-net --name mongo-server \ Anda dapat $ docker exec -it mongo-server bash _Sekarang kita dapat mulai bekerja dengan database MongoDB menggunakan Data yang akan kita gunakan dalam postingan ini adalah beberapa data produk untuk toko online laptop, seperti yang ditunjukkan pada postingan Elasticsearch. Anda dapat mengunduh file JSON ini untuk mendapatkan data mentah yang akan digunakan Jika Anda menggunakan $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ Dan jika Anda menggunakan $ docker exec -it mongo-server bash _0 yang diinstal di komputer Anda, Anda harus memiliki file JSON ini di direktori kerja Anda saat ini. Kemudian kita dapat memuat file ini dan memasukkan semua dokumen ke dalam koleksiPoin kunci untuk kode di atas
Sekarang datanya sudah siap, kita bisa mulai menulis beberapa query untuk itu Seperti yang kita lihat, dokumen laptop dalam koleksi $ docker exec -it mongo-server bash 5 memiliki bidang $ docker exec -it mongo-server bash 9 yang merupakan larik dokumen tersemat. Lebih kompleks untuk membuat kueri dan memperbarui bidang seperti ini daripada bidang sederhana yang tidak bersarangPertama, mari cari semua laptop yang CPU-nya $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 0. Ini seharusnya cukup sederhana karena CPU tidak ambiguPerhatikan bahwa bidang bersarang ditanyakan dengan notasi titik dan harus diberi tanda kutip. Jika Anda lebih suka menulis kueri yang mencakup banyak baris dengan IDE grafis, silakan lihat posting ini mengenai IDE untuk MongoDB Kita harus mendapatkan hasil yang kita inginkan karena hanya ada satu dokumen bersarang di array $ docker exec -it mongo-server bash 9 yang memiliki nilai untuk model CPUSekarang mari kita cari semua laptop yang memiliki memori 16GB. Secara intuitif, Anda mungkin ingin menggunakan kueri seperti ini Saat kueri di atas dijalankan, sepertinya semua laptop yang memorinya 16GB dikembalikan Namun, di sinilah banyak pemula MongoDB membuat kesalahan dan di mana beberapa bug dimasukkan ke dalam kode Anda. Jika Anda memasukkan "itu" di Kami mendapatkan laptop yang penyimpanannya 16GB juga dengan kueri di atas. Ini karena kueri di atas menemukan dokumen di mana larik $ docker exec -it mongo-server bash 9 memiliki setidaknya satu dokumen tersemat yang berisi bidang $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 4 sama dengan $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 5 dan setidaknya satu dokumen tersemat (tetapi tidak harus dokumen tersemat yang sama) yang berisi bidang $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 6 sama dengan $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 7Karena semua array $ docker exec -it mongo-server bash _9 memiliki dokumen tersemat yang $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 4 adalah $ docker cp ./laptops_demo_for_mongodb.json mongo-server:/ 5, kueri di atas memberikan hasil yang salah. Apa yang kita inginkan adalah bahwa kedua syarat tersebut harus dipenuhi untuk dokumen tersemat yang sama. Untuk mencapai ini, kami tidak dapat meminta dengan notasi titik seperti yang ditunjukkan di atas tetapi perlu menggunakan operator $elemMatch Kali ini laptop yang penyimpanannya 16GB tetapi memorinya bukan 16GB tidak akan dikembalikan. Jika tidak percaya, Anda bisa menghitung jumlah dokumen yang dikembalikan oleh kedua query tersebut Sekarang mari kita coba kasus yang lebih rumit dan temukan semua laptop yang memorinya 16GB dan penyimpanannya 1TB. Kita perlu menggunakan operator Permintaan ini akan mengembalikan hasil yang kita inginkan Perhatikan bahwa meskipun operator Anda akan mendapatkan satu hasil yang salah dalam kasus ini. Jika Anda mencoba dengan kondisi lain, Anda akan mendapatkan hasil yang lebih salah Setelah Anda mengetahui cara membuat kueri array dengan dokumen bersarang, seharusnya cukup mudah untuk memperbaruinya. Perhatikan bahwa dokumen bersarang diurutkan dalam larik dan karena itu Anda dapat mengakses dokumen bersarang berdasarkan posisi indeks Mari perbarui memori menjadi 16GB untuk laptop dengan Jika kami memeriksa laptop ini sekarang, atributnya seharusnya sudah diperbarui Di sini kami menggunakan proyeksi untuk hanya menampilkan bidang $ docker exec -it mongo-server bash _9 dari dokumenBersulang. Dokumen bersarang berhasil diperbarui Dalam posting ini, kami telah memperkenalkan cara membuat kueri dan memperbarui array dokumen bersarang di MongoDB. Ini adalah penggunaan tingkat lanjut tetapi sangat umum dalam praktiknya. Saya yakin Anda cukup percaya diri dalam menangani masalah semacam ini dalam pekerjaan Anda sekarang Bisakah kita membuat koleksi bersarang di MongoDB?Atau dengan kata lain, ketika suatu koleksi memiliki dokumen, dokumen ini berisi dokumen lain, dokumen lain berisi sub-dokumen lain, dan seterusnya, maka jenis dokumen tersebut dikenal sebagai dokumen yang disematkan/bersarang. Di MongoDB, Anda hanya dapat menyarangkan dokumen hingga 100 level .
Bagaimana cara saya meminta banyak nilai di MongoDB?MongoDB menyediakan find() yang digunakan untuk menemukan banyak nilai atau dokumen dari koleksi. Metode find() mengembalikan kursor dari kumpulan hasil dan mencetak semua dokumen. Untuk menemukan banyak nilai, kita dapat menggunakan operasi agregasi yang disediakan oleh MongoDB itu sendiri.
Bagaimana cara mencari di dalam array di MongoDB?Untuk menanyakan apakah bidang larik berisi setidaknya satu elemen dengan nilai yang ditentukan, gunakan filter { . Untuk menentukan kondisi pada elemen dalam bidang larik, gunakan operator kueri dalam dokumen filter kueri. {
Bagaimana cara menanyakan array objek di MongoDB?Untuk mencari larik objek di MongoDB, Anda dapat menggunakan operator $elemMatch . Operator ini memungkinkan kita untuk mencari lebih dari satu komponen dari sebuah objek array. |