MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

2 Cara Membatasi Dokumen yang Dikembalikan di MongoDB

Saat Anda menjalankan kueri Di MongoDB, Anda memiliki opsi untuk membatasi dokumen yang dikembalikan. Di sinilah Anda menentukan jumlah maksimum dokumen yang akan dikembalikan oleh operasi.

Misalnya, jika suatu operasi biasanya mengembalikan 2.000 dokumen, tetapi Anda menetapkan batas 1.000, maka hanya 1.000 dokumen yang dikembalikan. Namun, jika operasi hanya akan mengembalikan katakanlah, 500 dokumen, maka semua 500 dikembalikan (karena tidak melanggar batas 1.000 dokumen).

Ini sedikit seperti menggunakan TOP klausa di SQL Server, atau LIMIT klausa di MySQL, MariaDB, PostgreSQL, dan SQLite.

Membatasi dokumen yang dikembalikan dapat membantu meningkatkan kinerja dengan mencegah lebih banyak dokumen dikembalikan dan diproses daripada yang diperlukan.

Di MongoDB, kita dapat menggunakan cursor.limit() metode atau $limit operator agregasi untuk membatasi dokumen yang dikembalikan.

The cursor.limit() Metode

Misalkan kita memiliki koleksi yang disebut pets dengan dokumen sebagai berikut:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }

Kita dapat menggunakan limit() metode untuk membatasi jumlah dokumen yang dikembalikan saat menanyakan koleksi ini.

Contoh:

db.pets.find().limit(3)

Hasil:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

$limit Operator Agregasi

Saat menggunakan pipa agregasi, Anda dapat menggunakan $limit operator agregasi untuk membatasi hasil yang diteruskan ke tahap berikutnya dalam pipeline.

Contoh:

db.pets.aggregate([
    {
      $match: { }
    },
     { 
      $limit : 3
    }
])

Contoh:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

Biasanya, $match operator tidak akan terdiri dari dokumen kosong seperti yang kita dapatkan di sini. Biasanya akan menyertakan kueri yang dapat digunakan untuk memfilter hasil di bagian saluran tersebut. Namun dalam hal ini saya menggunakan dokumen kosong untuk membuat contoh lebih mudah diikuti.

Mengingat saya melewati dokumen kosong pada tahap pertama, saya bisa saja melakukan ini:

db.pets.aggregate([
     { 
      $limit : 3
    }
])

Either way, hasilnya terbatas hanya 3 dokumen.

Saat digunakan dalam pipa agregasi, $limit operator bisa berada di suatu tempat di tengah pipa. Jika demikian, dokumen terbatas akan diteruskan ke tahap berikutnya.

Berikut ini contoh untuk menggambarkan apa yang saya maksud.

db.pets.aggregate([
    {
      $match: { }
    },
     { 
      $limit : 3
    },
    {
      $match: { "type": "Cat" }
    }
])

Hasil:

{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

Hanya satu kucing dalam hasil terbatas (walaupun ada dua kucing dalam dokumen asli) sehingga hanya kucing itu yang dicocokkan pada tahap ketiga.

Ini berbeda dengan melakukan hal berikut.

db.pets.aggregate([
    {
      $match: { "type": "Cat" }
    },
     { 
      $limit : 3
    }
])

Hasil:

{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }

Dalam hal ini, kami mencari kucing di dokumen asli, lalu membatasi hasilnya hanya 3. Mengingat hanya ada 2 kucing, $limit tidak berdampak pada hasil.

Membatasi Dokumen yang Diurutkan

Jika Anda membatasi hasil setelah menyortir dokumen, maka batas tersebut akan memperhitungkan penyortiran.

Contoh:

db.pets.aggregate([
    {
      $sort: { "_id": -1 }
    },
     { 
      $limit : 3
    }
])

Hasil:

{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }

Dalam hal ini, saya mengurutkan semua dokumen berdasarkan _id bidang dalam urutan menurun (-1 menentukan urutan menurun).

Ini dia lagi dalam urutan menaik (nilai 1 menentukan urutan menaik):

db.pets.aggregate([
    {
      $sort: { "_id": 1 }
    },
     { 
      $limit : 3
    }
])

Hasil:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

Saat membatasi hasil setelah diurutkan secara eksplisit, pastikan operasi pengurutan menggunakan pengurutan yang stabil.

Jenis stabil adalah salah satu yang mengembalikan urutan pengurutan yang sama setiap kali dilakukan. Jenis tidak stabil di sisi lain, adalah salah satu yang dapat mengembalikan urutan pengurutan yang berbeda bila dilakukan beberapa kali.

Untuk memastikan bahwa Anda melakukan pengurutan yang stabil, sertakan setidaknya satu bidang dalam pengurutan Anda yang berisi nilai unik eksklusif (misalnya, _id lapangan).

Informasi Lebih Lanjut

Untuk informasi lebih lanjut, lihat dokumentasi MongoDB untuk:

  • cursor.limit()
  • $limit (agregasi)

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Membangun mongo-cxx-driver menggunakan CMake ExternalProject_Add

  2. Konversikan ObjectID (Mongodb) ke String dalam JavaScript

  3. meteor:bagaimana saya bisa membuat cadangan basis data mongo saya?

  4. Bagaimana cara menanyakan MongoDB langsung dari Ruby alih-alih menggunakan Mongoid?

  5. Apa perbedaan antara menyimpan dan menyisipkan di Mongo DB?