MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Co to jest kursor w MongoDB?

Oto porównanie między toArray() i kursory po find() w sterowniku Node.js MongoDB. Wspólny kod:

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
});

Oto toArray() kod, który znajduje się w powyższej sekcji.

    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();
    });

Zgodnie z dokumentacją,

Dzwoniący jest odpowiedzialny za upewnienie się, że jest wystarczająco dużo pamięci do przechowywania wyników.

Oto podejście oparte na kursorze, przy użyciu cursor.forEach() metoda:

    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();
        }
    );
});

Za pomocą forEach() Podejście, zamiast pobierać wszystkie dane z pamięci, przesyłamy dane do naszej aplikacji. find() tworzy kursor natychmiast, ponieważ w rzeczywistości nie wysyła żądania do bazy danych, dopóki nie spróbujemy użyć niektórych dokumentów, które dostarczy. Punkt cursor jest opisanie naszego zapytania. Drugi parametr cursor.forEach pokazuje, co zrobić, gdy wystąpi błąd.

W początkowej wersji powyższego kodu był to toArray() co wymusiło wywołanie bazy danych. Oznaczało to, że potrzebowaliśmy WSZYSTKICH dokumenty i chciał, aby były w array .

Zwróć uwagę, że MongoDB zwraca dane w partiach. Poniższy obrazek pokazuje żądania od kursorów (z aplikacji) do MongoDB :

forEach skaluje się lepiej niż toArray ponieważ możemy przetwarzać dokumenty tak, jak przychodzą do końca. Porównaj to z toArray - gdzie czekamy na WSZYSTKIE dokumenty do pobrania i całość budowana jest tablica. Oznacza to, że nie uzyskujemy żadnych korzyści z faktu, że sterownik i system bazy danych współpracują ze sobą, aby wsadowo przesyłać wyniki do aplikacji. Tworzenie partii ma na celu zapewnienie wydajności pod względem obciążenia pamięci i czasu wykonania. Wykorzystaj to w swojej aplikacji, jeśli możesz.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Percona Live Frankfurt 2018 - Podsumowanie wydarzenia i nasze sesje

  2. Pymongo / MongoDB:utworzyć indeks czy zapewnić indeks?

  3. Nie można znaleźć dokumentów przeszukujących według ObjectId przy użyciu Mongoose

  4. Czy mogę wykonać zapytanie tekstowe za pomocą sterownika mongodb c#?

  5. Nowy sposób zarządzania bazami danych Open Source