【问题标题】:Turn collection in firebase into array in nodejs将firebase中的集合转换为nodejs中的数组
【发布时间】:2020-12-19 12:54:14
【问题描述】:

我是 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);

问题是:我无法将数据库中的内容转换为数组,我不明白我已经延迟了几个小时的问题。 我希望引擎变量有数组

【问题讨论】:

  • 如果你在一个集合上调用 get 那么它应该返回一个查询快照。该快照包含您要查找的文档。尝试将文档映射到数组。

标签: javascript node.js arrays firebase google-cloud-firestore


【解决方案1】:

以下应该可以解决问题:

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);

});

我们首先声明并清空数组,然后遍历 preferences 集合中的文档,并且对于每个文档,我们将 data() 方法返回的对象推送(即添加)到数组中。最后我们有一个包含所有工程师数据的数组。


请注意,这将返回带有下划线的字段名称(即{ _html: 5, _angular: 5, _react: 3, _css: 3 }),因为我们不对data() 返回的对象进行任何转换。如果你想删除_,你可以操作data()返回的对象。

【讨论】:

  • 谢谢帮忙,数组是空的,能告诉我为什么它对我不起作用吗?
  • 我犯了一个错误...忘记了循环!更新了!
  • 非常感谢您的帮助,我正在尝试运行代码,似乎一切正常,但我看不到数组中的内容,它显示数组为空跨度>
  • 我在答案中添加了一个 console.log 来记录数组的大小。您在日志中看到了什么?
  • 在我做 res.json(engineers); 之后我做console.log(工程师),我得到数组的空白数组。 []。数组真的是空的吗?或者它已经满了,我可以用它来计算吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2019-12-31
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
相关资源
最近更新 更多