Как я могу отфильтровать массив с результатом запроса мангуста?

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

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

  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 не соответствует отфильтрованному списку, как описано в ответе, но точно соответствует результату логического выражения функции обратного вызова. Я также проверил это в текущей документации по async, чтобы узнать, изменилось ли что-нибудь в функции фильтр, но не заметил никаких изменений.

не могли бы вы объяснить свою цель? Вы хотите выполнить поиск мангуста для каждого элемента в вашем массиве req.body.data.entries, и эти поиски не зависят друг от друга. это правильно?

Raghav Garg 13.09.2018 18:20

Я намерен отфильтровать неверные записи. Данные из req.body.data.entries похожи на данные датчиков, которые могут содержать либо запись датчика, которая больше не может быть зарегистрирована, либо датчики из другой сети. Таким образом, поиски не зависят друг от друга.

nlang 14.09.2018 16:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
965
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, есть другой способ сделать это. Вместо получения строк в async. Вы можете отфильтровать все записи из базы данных. В 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
    });

  }

Спасибо, что помогли мне. Я наконец отфильтровал req.body.data.entries, получив результат docs.

nlang 14.09.2018 16:56

Другие вопросы по теме