MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meilleur moyen d'interroger tous les documents d'une collection mongodb de manière réactive sans inondation de RAM

Je ne suis pas un expert de mongodb, mais sur la base des exemples que j'ai vus, c'est un modèle que j'essaierais.

J'ai omis les événements autres que les données, car la limitation de celui-ci semble être la principale préoccupation.

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

J'essaie de mettre en place un test de ce flux Rx sans mongodb, en attendant cela pourrait vous donner quelques idées.