Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将firebase中的集合转换为nodejs中的数组_Javascript_Node.js_Arrays_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 将firebase中的集合转换为nodejs中的数组

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 },

我是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.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(工程师),得到了数组的空白数组。[]. 数组真的是空的吗?或者它是满的,我可以用它来计算吗?