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

Apa itu Kursor di MongoDB?

Berikut perbandingan antara toArray() dan kursor setelah find() di driver Node.js MongoDB. Kode umum:

var MongoClient = require('mongodb').MongoClient,
assert = require('assert');

MongoClient.connect('mongodb://localhost:27017/crunchbase', function (err, db) {
    assert.equal(err, null);
    console.log('Successfully connected to MongoDB.');

    const query = { category_code: "biotech" };

    // toArray() vs. cursor code goes here
});

Berikut toArray() kode yang ada di bagian di atas.

    db.collection('companies').find(query).toArray(function (err, docs) {
        assert.equal(err, null);
        assert.notEqual(docs.length, 0);

        docs.forEach(doc => {
            console.log(`${doc.name} is a ${doc.category_code} company.`);
        });

        db.close();
    });

Sesuai dengan dokumentasi,

Penelepon bertanggung jawab untuk memastikan bahwa ada cukup memori untuk menyimpan hasil.

Berikut pendekatan berbasis kursor, menggunakan cursor.forEach() metode:

    const cursor = db.collection('companies').find(query);

    cursor.forEach(
        function (doc) {
            console.log(`${doc.name} is a ${doc.category_code} company.`);
        },
        function (err) {
            assert.equal(err, null);
            return db.close();
        }
    );
});

Dengan forEach() pendekatan, alih-alih mengambil semua data di memori, kami mengalirkan data ke aplikasi kami. find() membuat kursor segera karena tidak membuat permintaan ke database sampai kami mencoba menggunakan beberapa dokumen yang akan disediakannya. Titik cursor adalah untuk menggambarkan permintaan kami. Parameter kedua untuk cursor.forEach menunjukkan apa yang harus dilakukan ketika terjadi kesalahan.

Pada versi awal dari kode di atas, adalah toArray() yang memaksa panggilan database. Itu berarti kami membutuhkan SEMUA dokumen dan ingin mereka berada dalam array .

Perhatikan bahwa MongoDB mengembalikan data dalam batch. Gambar di bawah ini menunjukkan permintaan dari kursor (dari aplikasi) ke MongoDB :

forEach skala lebih baik daripada toArray karena kami dapat memproses dokumen saat masuk sampai kita mencapai akhir. Bandingkan dengan toArray - tempat kami menunggu SEMUA dokumen yang akan diambil dan seluruhnya array dibangun. Ini berarti kami tidak mendapatkan keuntungan apa pun dari fakta bahwa driver dan sistem database bekerja sama untuk mengelompokkan hasil ke aplikasi Anda. Batching dimaksudkan untuk memberikan efisiensi dalam hal overhead memori dan waktu eksekusi. Manfaatkan dalam aplikasi Anda, jika Anda bisa.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Memasukkan data ke array bersarang di mongodb

  2. Kesalahan kunci duplikat MongoDB E11000

  3. Meteor mengembalikan kesalahan string heksadesimal yang tidak valid mencoba membuat ObjectID?

  4. Draft.js - Tidak bisa mendapatkan data dari database. Kesalahan lintas-asal

  5. Menginstal MongoDB di CentOS 7