【问题标题】:Firebase Functions: Node.js: Iterate map stored in firebase document fieldFirebase 函数:Node.js:迭代存储在 firebase 文档字段中的地图
【发布时间】:2020-08-11 13:01:42
【问题描述】:

我正在努力寻找有关在使用 Node.js 构建的函数触发器中使用从 firebase 提取的地图的文档。每次我找到示例代码时,它都会使用我的 index.js 文件无法理解的函数。

示例数据库结构:
db.collection('users').doc('abc')
让 'abc' 保存一个名为 'uids' 的字段,它是 String 的 Map,bool

我想在我的 Firebase 触发器函数中迭代 'uids'map 以更新所有值为“false”的元素

我无法找出在我的 index.js 中使用地图进行任何操作/逻辑的适当方法。

这是我尝试过的两个比较连贯的 sn-ps,在网上找到的:

db.collection('users').doc('abc').get().then((doc) => {
  var uids = doc.data().uids;

//try 1
  uids.forEach((value, key, map) => {
    //do stuff
  });

//try 2
  for (var uid in uids) {
    if (uid.val() == false)
      //do stuff
  }
});

在搜索有关我的 index.js 代码的特定语法时,我是否错误地理解这是一个 Node.js 文件?我不明白为什么我要找到数十种方法来做同样的事情。似乎完全随机的解决方案到处都在我的文件中不起作用。

解决方案:: 感谢 cmets 并回答帮助解决此问题。 我能够使用“Object.elemets(uids)”来投射 Firebase 地图以提取键和值。

for (let [key, value] of Object.elements(uids)) {
  //do stuff
}

【问题讨论】:

  • 通常有很多方法可以完成工作。您在这些尝试中遇到的具体问题是什么?有错误信息吗?什么不按您期望的方式工作。请编辑问题以明确。请注意,Firestore 文档中的地图字段将显示为纯 JavaScript 对象,因此您将像在 JavaScript 中一样正常处理它们。
  • 谢谢道格。稍微整理了一下文字。我遇到的具体问题是试图操纵 JS 'map' 对象来执行一些逻辑。当我在 var 中有 uid 时,我不知道如何访问或迭代这些条目。
  • 在 JS 中有很多方法可以迭代一个对象。这很常见。见:stackoverflow.com/questions/14379274/…
  • ahhh 使用 Object.x 进行转换是关键技巧。谢谢!

标签: javascript node.js google-cloud-firestore google-cloud-functions


【解决方案1】:

你可以试试:

db.collection('users').doc('abc').get().then((doc) => {
  var uids = doc.data().uids;
  for (var uid of Object.keys(uids)) {
    console.log(uid, uids[uid]); // key, value
  }
});

【讨论】:

  • uuids[uuid]
  • 这是一个错字对不起。我走得太快了。我更新了答案。
  • 没关系,我明白哈哈。谢谢,我试试看
  • 有趣的结果:“0未定义”、“1未定义”、“2未定义”。我在“uids”中有三个元素。所以这是朝着正确方向迈出的一步。但是,键应该是大约 16 个字符长的字符串。
  • 知道了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2018-10-02
  • 1970-01-01
  • 2020-11-15
  • 2020-07-10
  • 2020-03-07
  • 1970-01-01
相关资源
最近更新 更多