【问题标题】:How to Read a Map from Firestore如何从 Firestore 读取地图
【发布时间】:2020-09-17 15:18:12
【问题描述】:

我正在尝试将数据从 Firestore 读取到我的 TypeScript 项目中。

Firestore 我在 mapName 字段下有一张地图

我在使用JSON.stringify(change.after.data())时得到的以下数据结构

const test: Test = {
  mapName: {
    "v3mioXc3VoFgfj0WEq": {
      isNormalSubscription: false,
    },
    "as12oXc3VoFas12WEq": {
      isNormalSubscription: true,
    },
  },
};

interface Test {
  mapName: Map<string, any>
}

我遇到了以下错误:

Type '{ v3mioXc3VoFgfj0WEq: { isNormalSubscription: false; }; }' is not assignable to type 'Map<string, any>'.
  Object literal may only specify known properties, and '"v3mioXc3VoFgfj0WEq"' does not exist in type 'Map<string, any>'.

由于 v3mioXc3VoFgfj0WEqas12oXc3VoFas12WEq 是我事先不知道的 Firestore 密钥,我应该如何更改我的测试界面以正确管理数据?

【问题讨论】:

    标签: typescript google-cloud-firestore


    【解决方案1】:

    Firestore 不接受或返回 ES6 Map 类型的对象。它只适用于普通的旧 JavaScript 对象。当您在DocumentSnapshot 上调用data() 时,您会得到这些普通对象之一。对象的属性与文档中的字段匹配。

    const obj = snapshot.data()   // plain object
    const mapName = obj.mapName   // another plain object
    const field1 = mapName.v3mioXc3VoFgfj0WEq
    const field2 = mapName.as12oXc3VoFas12WEq
    

    如果您更愿意使用 Map 对象,则必须将普通对象转换为新 Map。

    【讨论】:

    • 我想在不知道“键”的情况下遍历 mapName 字段。如果我从你上面的代码中得到了这个,这不可能吗?
    • 这是一个不同的问题(迭代对象的属性),它已经有很多不同的答案。 stackoverflow.com/questions/8312459/…
    • 我不知道我可以遍历这个数据结构。我想到我应该有一个数组结构。这有帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多