Kueri dan operator proyeksi mongodb

Di MongoDB, kami menggunakan metode find() untuk mengambil data. Namun, find() mengambil semua bidang dalam dokumen tanpa pemfilteran apa pun

Proyeksi MongoDB memecahkan masalah ini dengan mengaktifkan fungsi find() untuk digunakan dengan argumen pemfilteran data, yang memungkinkan pengguna mengekstrak hanya bidang data yang diperlukan dari dokumen

Dalam artikel praktis ini, kami akan menunjukkannya kepada Anda

(Artikel ini adalah bagian dari Panduan MongoDB kami. Gunakan menu sebelah kanan untuk menavigasi. )

Cara kerja proyeksi MongoDB

Proyeksi MongoDB adalah alat yang ampuh yang dapat digunakan untuk mengekstrak hanya bidang yang Anda perlukan dari dokumen—tidak semua bidang. Ini memungkinkan Anda untuk

  • Proyek data ringkas dan transparan
  • Filter kumpulan data tanpa memengaruhi kinerja database secara keseluruhan

Karena proyeksi MongoDB dibangun di atas metode find() yang ada, Anda dapat menggunakan kueri proyeksi apa pun tanpa modifikasi signifikan pada fungsi yang ada. Selain itu, proyeksi adalah faktor kunci saat menemukan data khusus pengguna dari kumpulan data tertentu

Sintaks Dasar Proyeksi MongoDB

db.collection_name.find({},{<field> : <value>})

Proyeksi MongoDB menggunakan sintaks find yang sama, tetapi kami juga menambahkan sekumpulan parameter ke fungsi find. Kumpulan parameter ini menginformasikan instance MongoDB tentang bidang mana yang akan dikembalikan

Pertimbangkan koleksi berikut yang disebut "informasi kendaraan"

Kueri dan operator proyeksi mongodb

Kami akan mencoba mengambil tahun model kendaraan buatan Toyota (make. 'Toyota')

Pernyataan find() normal

db.vehicleinformation.find({make : "Toyota"}).pretty()
_

Hasil

Kueri dan operator proyeksi mongodb

Dalam pernyataan ini, kami menerima semua data dalam dokumen di mana make adalah Toyota. Untuk mendapatkan tahun saja, kita bisa menggunakan proyeksi, seperti yang ditunjukkan di bawah ini

Pernyataan proyeksi MongoDB

db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()

Hasil

Kueri dan operator proyeksi mongodb

Dalam pernyataan proyeksi, kami menggunakan bidang tahun dengan nilai Boolean 1 (Benar) untuk menunjukkan bahwa kami hanya memerlukan bidang "tahun". Keterbatasannya adalah bahwa MongoDB akan mengembalikan ID objek (_id) dari setiap dokumen kecuali kami secara eksplisit menentukan bahwa kami tidak memerlukan ID objek

Pernyataan proyeksi MongoDB dengan “_id” dikecualikan

db.vehicleinformation.find({make : "Toyota"}, {year : 1, _id : 0}).pretty()

Hasil

Kueri dan operator proyeksi mongodb

Dalam pernyataan ini, kami memberikan 0 sebagai operator Boolean untuk menunjukkan bahwa kami tidak memerlukan bidang ID objek

Operator dalam Proyeksi MongoDB

Menggunakan metode proyeksi MongoDB untuk mengambil data tertentu dari dokumen akan berdampak positif pada kinerja database karena mengurangi beban kerja kueri pencarian, meminimalkan penggunaan sumber daya

Untuk mengurangi beban kerja, MongoDB menawarkan operator di bawah ini yang dapat digunakan dalam kueri proyeksi

  • $
  • $elemMatch
  • $irisan
  • $meta

$Operator

Operator $ digunakan untuk membatasi isi array untuk memproyeksikan elemen pertama yang cocok dengan kondisi kueri pada bidang array. Mulai dari MongoDB 4. 4, jika tidak ada kondisi kueri, elemen pertama akan dikembalikan dalam larik yang ditentukan

Sintaksis

db.collection.find( { <array>: <condition> .. }, { "<array>.$": 1 } )
_

Keterbatasan operator $

  • Hanya satu operator $ yang dapat digunakan dalam satu kueri
  • Kueri hanya boleh terdiri dari satu kondisi pada bidang larik yang akan diterapkan
  • Fungsi sort() dalam metode find() akan diterapkan sebelum operator $. Fungsi ini dapat menyebabkan tata urutan tidak ditampilkan dengan benar
  • Operator $ hanya dapat diterapkan di akhir jalur bidang. Pembatasan ini diperkenalkan di MongoDB 4. 4 untuk mengurangi masalah pemformatan
  • Ekspresi proyeksi $slice tidak dapat digunakan dengan operator $ sebagai bagian dari ekspresi yang sama

Kami akan menggunakan Koleksi "studentgrades" untuk mendemonstrasikan operator $

db.studentgrades.find({},{_id:0}).pretty()

Hasil

Kueri dan operator proyeksi mongodb

Menggunakan koleksi “studentgrades”, kami mencari apakah seorang siswa telah menerima nilai sama dengan atau lebih besar dari 80

Mari kita lihat apa yang terjadi jika kita tidak menggunakan operator $. Kode di bawah ini akan menghasilkan kueri yang mengembalikan semua nilai dalam larik sebagai keluaran jika ada item yang sama atau lebih besar dari 80

db.studentgrades.find( {grades: { $gte: 80}}, {"grades": 1})
_

Hasil

Kueri dan operator proyeksi mongodb

Menggunakan operator $ hanya akan mengembalikan item pertama yang sama atau lebih besar dari 80

db.studentgrades.find( {grades: { $gte: 80}}, {"grades.$": 1})

Hasil

Kueri dan operator proyeksi mongodb

Operator $elemMatch

Operator $elemMatch akan membatasi isi array ke elemen pertama yang cocok dengan kondisi tertentu. Kondisi ini berbeda dengan operator $ karena operator proyeksi $elemMatch memerlukan argumen kondisi yang eksplisit

Mari kita lihat sintaks penggunaan $elemMatch dalam metode find()

Sintaksis

db.collection.find( { <array>: <condition> .. }, { "<array>.$elemMatch": ($elemMatch operator) } )
_

Keterbatasan operator $elemMatch

  • Terlepas dari urutan bidang dalam dokumen, bidang yang diterapkan proyeksi $elemMatch akan dikembalikan sebagai bidang terakhir dokumen
  • operasi find() yang dilakukan pada tampilan MongoDB tidak mendukung operator proyeksi $elemMatch
  • Ekspresi kueri $text tidak didukung dengan operator $elemMatch

Kami akan menggunakan koleksi "schooldata" berikut untuk mendemonstrasikan operator $elemMatch

db.schooldata.find()
_

Hasil

Kueri dan operator proyeksi mongodb

Sekarang kami akan menjalankan ini di satu bidang. Dengan operator $elemMatch, kita akan mencari sekolah di London dengan siswa yang berumur sepuluh tahun. Metode pretty() digunakan untuk memformat output

db.vehicleinformation.find({make : "Toyota"}).pretty()
_0

Hasil

Kueri dan operator proyeksi mongodb

Dalam contoh di bawah ini, kami akan memeriksa beberapa bidang. Di sini, kami memeriksa usia dan nama siswa. Kami memeriksa apakah seorang siswa bernama "barry" yang berusia sepuluh tahun bersekolah di sekolah mana pun di London

db.vehicleinformation.find({make : "Toyota"}).pretty()
_1

Hasil

Kueri dan operator proyeksi mongodb

Operator Proyeksi $slice

Operator $slice menentukan jumlah elemen yang harus dikembalikan sebagai keluaran kueri

Sintaksis

db.vehicleinformation.find({make : "Toyota"}).pretty()
_2

Keterbatasan dalam operator $slice

  • Dengan diperkenalkannya MongoDB 4. 4, operator $slice hanya akan mengembalikan elemen yang diiris. Itu tidak akan mengembalikan item lain dalam array bersarang
  • Operator $slice tidak mendukung operasi find() yang dilakukan pada tampilan MongoDB
  • Operator $slice tidak dapat digunakan bersama dengan operator proyeksi $ karena pembatasan MongoDB, di mana bidang tingkat atas tidak dapat terdiri dari $ (tanda dolar) sebagai bagian dari nama bidang
  • Kueri tidak dapat berisi $slice dari array dan bidang yang disematkan dalam array sebagai bagian dari pernyataan yang sama untuk menghilangkan tabrakan jalur dari MongoDB 4. 4

Sekarang kita akan menggunakan koleksi "schooldata" untuk mendemonstrasikan operator $slice

db.schooldata.find()
_

Hasil

Kueri dan operator proyeksi mongodb

Mari kita mengiris elemen pertama dalam sebuah array. Untuk mencapai hasil ini, kami menggunakan operator $slice untuk mengiris hanya elemen pertama dari larik siswa

db.vehicleinformation.find({make : "Toyota"}).pretty()
_4

Hasil

Kueri dan operator proyeksi mongodb

Sekarang, kita akan mengiris elemen terakhir dalam array. Gunakan operator $slice dengan “-1” untuk menunjukkan record terakhir

db.vehicleinformation.find({make : "Toyota"}).pretty()
_5

Hasil

Kueri dan operator proyeksi mongodb

Untuk melewatkan elemen, kita harus menentukan elemen yang akan dilewati dan jumlah elemen yang akan dikembalikan. Contoh berikut menunjukkan skenario ini

Lewati elemen pertama dan kembalikan dua elemen berikutnya

db.vehicleinformation.find({make : "Toyota"}).pretty()
_6

Hasil

Kueri dan operator proyeksi mongodb

Dalam pernyataan ini, kami mengiris array "siswa" dengan melewatkan elemen pertama dan mengembalikan dua elemen yang tersisa. Ini didefinisikan di dalam tanda kurung siku []. Nilai pertama adalah elemen yang akan diabaikan, sedangkan nilai kedua adalah berapa sisa elemen yang akan dikembalikan. Jika array memiliki kurang dari dua elemen setelah melewatkan elemen pertama, ia akan mengembalikan semua elemen yang tersisa

Operator $meta

Operator $meta digunakan untuk mendapatkan metadata yang terkait dengan dokumen. Operator $meta dapat digunakan dengan MongoDB Aggregation dan proyeksi MongoDB. Bagian ini hanya akan membahas dasar-dasar proyeksi MongoDB dan bagaimana operator $meta akan digunakan dalam proyeksi

Operator $meta menggunakan sintaks berikut

db.vehicleinformation.find({make : "Toyota"}).pretty()
_7

Untuk “metaDataKeyword”, Anda dapat mengaitkan nilai-nilai ini

  • Kata Kunci “textScore”. "textScore" akan mengembalikan skor yang terkait dengan string $teks yang diberikan. Kata kunci ini pada dasarnya menemukan bagaimana tepatnya istilah pencarian dicocokkan dengan bidang yang diberikan dalam dokumen. $text query wajib saat menggunakan kata kunci "textScore" dari MongoDB 4. 4
  • Kata Kunci “indexKey”. Diperkenalkan di MongoDB 4. 4 sebagai alternatif pilihan kursor. fungsi returnKey(). Fungsi ini mengembalikan kunci indeks untuk dokumen yang menggunakan indeks non-teks. Kata kunci ini hanya untuk tujuan debug, tidak untuk digunakan di lingkungan produksi

Penggunaan dan Keterbatasan operator $meta dalam proyeksi

  • {$meta. Ekspresi “$textScore”} dapat menjadi bagian dari kueri proyeksi dalam dokumen untuk mendapatkan skor teks. Ekspresi dapat berupa inklusi atau pengecualian dalam pernyataan proyeksi. Batasan satu-satunya adalah jika ekspresi disetel ke bidang yang sudah ada dalam dokumen, nilai metadata yang diproyeksikan akan menimpa nilai saat ini di bidang
  • Anda tidak dapat menentukan "skor teks" dalam metode find(). Karenanya, pilihan terbaik adalah menggunakan agregasi MongoDB
  • Ekspresi $meta dapat digunakan dalam fungsi sort(). Metadata "textScore" akan diurutkan dalam urutan menurun
  • Ketika {$meta. Ekspresi “$textScore”} disertakan dalam fungsi proyeksi dan sortir, setiap fungsi dapat memiliki nama bidang yang berbeda untuk ekspresi tersebut. Sistem kueri akan mengabaikan nama bidang di sort()

Sekarang, mari kita lihat beberapa contoh

Untuk {$meta. “textScore”}, kita akan menggunakan koleksi makanan

db.vehicleinformation.find({make : "Toyota"}).pretty()
_8

Hasil

Kueri dan operator proyeksi mongodb

Mari buat indeks untuk koleksi "makanan". Kami akan menggunakan bidang "food_desc" untuk membuat indeks teks

db.vehicleinformation.find({make : "Toyota"}).pretty()
_9

Hasil

Kueri dan operator proyeksi mongodb

Sekarang mari kita cari skor teks. Kami menggunakan kata "pizza" sebagai istilah pencarian dan menggunakan operator $meta untuk mendapatkan skor teks untuk setiap dokumen. Identitas. 0) digunakan untuk menghilangkan id objek dari setiap dokumen untuk hasil yang lebih mudah

db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()
0

Hasil

Kueri dan operator proyeksi mongodb

Sekarang ke {$meta. “Key indeks”}. Karena "indexKey" hanya untuk keperluan debugging, dokumentasi resmi MongoDB menyatakan sebagai berikut

db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()
1

Contoh berikut dibuat menggunakan koleksi “vehiclesales”. Menggunakan {_id. 0}, id objek dihilangkan dari output

db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()
2

Hasil

Kueri dan operator proyeksi mongodb

Di sini, kami membuat indeks majemuk menggunakan bidang "make" dan "type"

db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()
_3

Hasil

Kueri dan operator proyeksi mongodb

Selanjutnya mari kita lakukan Proyeksi dengan indeks. Kami mencari dokumen di koleksi "penjualan kendaraan" yang jenisnya sama dengan "Olahraga" dan menggunakan operator $meta untuk mendapatkan kunci indeks untuk setiap dokumen

db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()
_4

Hasil

Kueri dan operator proyeksi mongodb

Bagaimana dengan proyeksi tanpa indeks? . Dalam hal ini, indeks tidak akan dikembalikan karena bidang harga bukan merupakan bagian dari indeks

Apa itu kueri dan proyeksi di MongoDB?

Apa itu kueri proyeksi? . Kueri proyeksi digunakan untuk menentukan atau membatasi data yang dikembalikan dalam hasil kueri . Dengan menentukan kueri proyeksi, Anda dapat menentukan bidang yang ingin Anda kembalikan atau kecualikan.

Apa itu operator proyeksi di MongoDB?

Dalam MongoDB, operator posisi $ digunakan untuk membatasi hanya elemen pencocokan pertama dari bidang array , dan itu terjadi meskipun ada . Itu harus mengharuskan untuk menampilkan bidang

Apa operator kueri logis di MongoDB?

Operator Logika - $and . Operator $and menggunakan evaluasi hubung singkat

Apa itu operator kueri?

Operator adalah kata khusus atau karakter yang digunakan untuk mengkueri database kita dalam ekspresi SQL . Untuk menanyakan database menggunakan operator, kami menggunakan klausa WHERE. Operator diperlukan untuk menentukan kondisi dalam SQL, karena mereka bertindak sebagai penghubung antara dua atau lebih kondisi.