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

Цикъл на масив и проверка на MongoDB колекция в цикъл (Async)

Общият ключ към асинхронната обработка е, че искате да имате някаква индикация кога текущата итерация е готова, преди да преминете към следващата итерация. Тъй като действителните операции като .find() тук самите те използват „обратно извикване“, което се „извиква“, когато операцията е завършена с отговор, тогава това, което обикновено искате да направите, е да извикате нещо, което означава вашия край на итерация в същия раздел на кода.

По основен начин можете да получите подобен резултат, както при традиционните цикли с "async.eachSeries " метод, който ще позволи само „една итерация наведнъж“:

function check (collection) {
    var records = [ { body: "Test 1"}, { body: "Test 2" } ];
    async.eachSeries(records,function(item,callback) {
        collection.find( item, function (err, rows) {
            console.log(rows);
            callback(err)
        });
    },function(err) {
        if (err) throw err;
        console.log("done");
    });
}

Така че всеки от аргументите на масива се предава на функцията "iterator" тук като параметър "item", а втори аргумент е функция "callback", която да се използва по-късно. Всеки път, когато се извика итераторът, този аргумент се предава на .find() метод, който на свой ред има собствено „обратно извикване“, където се дава отговорът „грешка“ или „документи“.

Вътре в това обратно извикване се извиква „обратното извикване“, предоставено от функцията „iterator“, за да сигнализира завършването на тази текуща итерация. Това позволява на функцията "each" тук да продължи и наистина да извика следващата "итерация" и да обработи следващия елемент от масива.

Отбелязвайки своя опит, имайте предвид правилния начин за отбелязване на „масив“ в JavaScript с [] скоби, както е показано. Това обикновено е важна разлика при работа с масиви.

Има и други варианти на "async.each" и "async.eachLimit" които и двете позволяват известна степен на паралелна обработка, но методът "Series" прави нещата "по ред" по начин, който сте свикнали с традиционните цикли.

Така че, когато операциите в цикъла са „неблокиращи“, трябва да укажете кога този цикъл завършва, преди да искате да продължите.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB с CSV данни

  2. Променете типа поле в Mongoid, без да губите данни

  3. Как да изпълним собствена заявка на MongoDB (JSON) само с помощта на mongo-java-driver?

  4. Добра идея ли е да генерирате колекции на ден в mongodb

  5. mongodb текстово търсене с множество полета