Как я могу отфильтровать массив с результатом запроса Мангуста? - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы отфильтровать массив на основе запроса мангуста. Тем не менее, я относительно новичок в node.js и асинхронном программировании. Мне известно, что Array.prototype.filter является синхронной функцией, а запросы mongoose являются асинхронными.

При поиске на этом сайте я обнаружил два следующих решения:

  1. фильтрация массива с помощью функции, которая возвращает обещание - но это выглядит довольно сложно, и я пока не понимаю концепцию.

  2. как ждать результата запроса мангуста? - сначала это решение выглядит вполне понятным, поэтому я попробовал

вот мой пример кода, основанного на втором подходе:

exports.create = function(req, res) {
    async.filter(req.body.data.entries, function(item, callback){
        MyCollection.findOne({'_id': item.id}, function(err, doc) {
            callback(err == null && doc != null);
        });    
    }, 
    function(results){
        req.body.data = results
        // default controller to create a document in Mongo DB
        return controller.create(Model, req, res);
    });
};

Однако, похоже, это не работает. results не соответствует отфильтрованному списку, как описано в ответе, но точно соответствует результату логического выражения функции обратного вызова. Я также проверил это в текущей асинхронной документации, чтобы увидеть, изменилось ли что-нибудь в функции filter , но не увидел никаких изменений.

1 Ответ

0 голосов
/ 13 сентября 2018

Ну, есть другой способ сделать это. Вместо того, чтобы получать строки в асинхронном режиме. Вы можете получить все записи, отфильтрованные из базы данных. В mongodb есть концепция $ in. Вы можете использовать это для получения нескольких записей одновременно с определенными идентификаторами. В вашем случае вот пример

exports.create = function(req, res) {
    var ids = []
    req.body.data.entries.forEach(function (item) {
      ids.push(item.id);
    });
    MyCollection.findOne({'_id': {$in: ids}}, function (err, docs) {
      // here you have all your filter data
      var myDocs = docs;

      //Callback from here to return data
    });

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...