Я новичок в 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 имела массив



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Следующее должно помочь:
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().
Спасибо за помощь, массив пустой, подскажите почему у меня не работает?
Я сделал ошибку... забыл петлю! Обновлено!
Большое спасибо за помощь, пытаюсь запустить код, вроде все работает, но не могу посмотреть что внутри массива, мне показывает, что массив пустой
Я добавил console.info в ответ, чтобы регистрировать размер массива. Что вы видите в своем журнале?
После того, как я сделаю res.json(engineers); Я делаю console.info (инженеры) и получаю пустые массивы массивов. []. Действительно ли массив пуст? Или он полный и можно ли его использовать для расчетов?
Я добавил еще один console.info. Каковы результаты двух console.info?
Первый отпечаток возвращает: «Найдено 16 дукоментов», второй отпечаток возвращает: 0
Была еще одна ошибка... извините за это. Я обновил ответ: вы должны отправить ответ из блока then().
Если вы вызываете получение коллекции, она должна вернуть снимок запроса. Этот снимок содержит документы, которые вы ищете. Попробуйте сопоставить документы с массивом.