Превратите коллекцию в firebase в массив в nodejs

Я новичок в nodejs, и есть проблема, которую я не могу решить. Я использую базу данных nodejs и firebase. В базе у меня есть коллекция, которая у меня есть по "инженерам", и я хочу перенести данные из базы в массив.

Это база данных, которая у меня есть: я хочу превратить настройки в массив:

Я хочу получить этот массив:

  const engineers = [
    // frontend engineers
    { html: 5, angular: 5, react: 3, css: 3 },
    { html: 4, react: 5, css: 4 },
    { html: 4, react: 5, vue: 4, css: 5 },
    { html: 3, angular: 3, react: 4, vue: 2, css: 3 },

    // backend engineers
    { nodejs: 5, python: 3, mongo: 5, mysql: 4, redis: 3 },
    { java: 5, php: 4, ruby: 5, mongo: 3, mysql: 5 },
    { python: 5, php: 4, ruby: 3, mongo: 5, mysql: 4, oracle: 4 },
    { java: 5, csharp: 3, oracle: 5, mysql: 5, mongo: 4 },

    // mobile engineers
    { objc: 3, swift: 5, xcode: 5, crashlytics: 3, firebase: 5, reactnative: 4 },
    { java: 4, swift: 5, androidstudio: 4 },
    { objc: 5, java: 4, swift: 3, androidstudio: 4, xcode: 4, firebase: 4 },
    { objc: 3, java: 5, swift: 3, xcode: 4, apteligent: 4 },

    // devops
    { docker: 5, kubernetes: 4, aws: 4, ansible: 3, linux: 4 },
    { docker: 4, marathon: 4, aws: 4, jenkins: 5 },
    { docker: 3, marathon: 4, heroku: 4, bamboo: 4, jenkins: 4, nagios: 3 },
    { marathon: 4, heroku: 4, bamboo: 4, jenkins: 4, linux: 3, puppet: 4, nagios: 5 }
  ];

Это код, который я записал до сих пор, но он у меня не работает.

//enginer.js file

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

exports.getPreferancesArray = (req,res) => {
  let engineers = {};
  db.collection(`/preferences`).get().then((doc) => {
    if (doc.exists) {
      engineers = doc.data();
      console.info(engineers);
    }
    res.json(engineers);
  });
};

//index.js
const {
  getPreferancesArray
} = require('./enginer');

const cors = require('cors');
app.use(cors());

app.get('/kmeansArray', FBAuth, getPreferancesArray);

exports.api = functions.region('europe-west1').https.onRequest(app);

Проблема такая: не могу сконвертировать контент из базы в массив, не понимаю в чем проблема уже несколько часов тяну. Я хочу, чтобы переменная Enginer имела массив

Если вы вызываете получение коллекции, она должна вернуть снимок запроса. Этот снимок содержит документы, которые вы ищете. Попробуйте сопоставить документы с массивом.

Abrar Hossain 19.12.2020 14:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
921
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Следующее должно помочь:

let engineers = [];

db.collection("preferences").get().then(querySnapshot => {
    console.info(`Found ${querySnapshot.size} documents.`);
    querySnapshot.forEach(doc => {
        // doc.data() is never undefined for query doc snapshots
        const engineerDetails = doc.data();
        engineers.push(engineerDetails);
    });

    // Here the engineers array is fully populated
    console.info(engineers.length);
    res.json(engineers);

});

Сначала мы объявляем и очищаем массив, затем перебираем документы в коллекции preferences и для каждого документа помещаем (то есть добавляем) объект, возвращаемый методом data(), в массив. В конце у нас есть массив, содержащий все данные инженеров.


Обратите внимание, что это вернет имена полей со знаком подчеркивания (например, { _html: 5, _angular: 5, _react: 3, _css: 3 }), потому что мы не делаем никаких преобразований для объекта, возвращаемого data(). Если вы хотите удалить _, вы должны манипулировать объектом, возвращаемым data().

Спасибо за помощь, массив пустой, подскажите почему у меня не работает?

user13608061 19.12.2020 14:10

Я сделал ошибку... забыл петлю! Обновлено!

Renaud Tarnec 19.12.2020 14:29

Большое спасибо за помощь, пытаюсь запустить код, вроде все работает, но не могу посмотреть что внутри массива, мне показывает, что массив пустой

user13608061 19.12.2020 14:56

Я добавил console.info в ответ, чтобы регистрировать размер массива. Что вы видите в своем журнале?

Renaud Tarnec 19.12.2020 14:59

После того, как я сделаю res.json(engineers); Я делаю console.info (инженеры) и получаю пустые массивы массивов. []. Действительно ли массив пуст? Или он полный и можно ли его использовать для расчетов?

user13608061 19.12.2020 15:04

Я добавил еще один console.info. Каковы результаты двух console.info?

Renaud Tarnec 19.12.2020 15:13

Первый отпечаток возвращает: «Найдено 16 дукоментов», второй отпечаток возвращает: 0

user13608061 19.12.2020 15:57

Была еще одна ошибка... извините за это. Я обновил ответ: вы должны отправить ответ из блока then().

Renaud Tarnec 19.12.2020 16:04

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