Javascript 将firebase中的集合转换为nodejs中的数组
我是nodejs的新手,有个问题我解决不了。 我使用nodejs和firebase数据库。在数据库中,我有一个关于“工程师”的集合,我希望将数据从数据库移动到阵列中 这是我拥有的数据库:我想将首选项转换为数组: 我想得到这个数组:Javascript 将firebase中的集合转换为nodejs中的数组,javascript,node.js,arrays,firebase,google-cloud-firestore,Javascript,Node.js,Arrays,Firebase,Google Cloud Firestore,我是nodejs的新手,有个问题我解决不了。 我使用nodejs和firebase数据库。在数据库中,我有一个关于“工程师”的集合,我希望将数据从数据库移动到阵列中 这是我拥有的数据库:我想将首选项转换为数组: 我想得到这个数组: const engineers = [ // frontend engineers { html: 5, angular: 5, react: 3, css: 3 }, { html: 4, react: 5, css: 4 },
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.log(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变量具有数组以下内容可以实现此目的:
let engineers = [];
db.collection("preferences").get().then(querySnapshot => {
console.log(`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.log(engineers.length);
res.json(engineers);
});
我们首先声明并清空数组,然后在首选项
集合中循环文档,对于每个文档,我们将方法返回的对象推送到(即添加)数组中。最后我们有一个包含所有工程师数据的数组
请注意,这将返回带下划线的字段名(即
{{u html:5,{u angular:5,{u react:3,{u css:3}
),因为我们不会对data()
返回的对象进行任何转换。如果您想删除。
,则由您操作data()
返回的对象。如果您在集合上调用get,则它应该返回一个查询快照。该快照包含您正在查找的文档。尝试将文档映射到数组。谢谢你的帮助,数组是空的,你能告诉我为什么它对我不起作用吗?我犯了一个错误。。。忘了循环!更新!非常感谢您的帮助,我正在尝试运行代码,看起来一切正常,但我看不到数组中有什么,它显示数组是空的。我在答案中添加了一个console.log来记录数组的大小。您在日志中看到了什么?在我执行res.json(工程师)之后;我做了console.log(工程师),得到了数组的空白数组。[]. 数组真的是空的吗?或者它是满的,我可以用它来计算吗?