MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Най-добрият начин да направите заявка за всички документи от колекция mongodb по реактивен начин без наводняване на RAM

Не съм експерт по mongodb, но въз основа на примерите, които съм виждал, това е модел, който бих опитал.

Пропуснах събитията, различни от данните, тъй като ограничаването на това изглежда е основната грижа.

var cursor = db.collection('mycollection').find({});  

const cursorNext = new Rx.BehaviourSubject('next');  // signal first batch then wait
const nextBatch = () => {
  if(cursor.hasNext()) {
    cursorNext.next('next');
  }
});

cursorNext
  .switchMap(() =>                            // wait for cursorNext to signal
     Rx.Observable.fromPromise(cursor.next())  // get a single doc
       .repeat()                               // get another
       .takeWhile(() => cursor.hasNext() )     // stop taking if out of data
       .take(batchSize)                        // until full batch
       .toArray()                              // combine into a single emit
  )
  .map(docsBatch => {
    // do something with the batch
    // return docsBatch or modified doscBatch
  })
  ... // other operators?
  .subscribe(x => {
    ...
    nextBatch();
  });         

Опитвам се да съставя тест на този Rx поток без mongodb, междувременно това може да ви даде някои идеи.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 10 въпроса, които да зададете (и да отговорите), когато хоствате MongoDB на AWS

  2. node.js mongodb как да се свържете с набор от реплики на mongo сървъри

  3. Схемата не е регистрирана за модел. Mongodb>Mongoose

  4. Как да сортирате колекция, използвайки последния елемент от масив

  5. как мога да създам моята заявка за mongodb въз основа на входа от потребителя в node.js?