javascript - Firebase Javascript/Typescript map 兼容性

标签 javascript typescript firebase google-cloud-firestore

当我尝试将 map 写入 firebase 时遇到此错误:

FirebaseError: Function DocumentReference.set() called with invalid data. Unsupported field value: a custom Map object (found in field documentData.elements)

我想将 map 而不是数组写入 firebase,以便能够合并数据集而不覆盖整个数组,而仅添加或删除 map 的条目。 但是,即使 firebase 文档说它支持 map ,我也无法让 map 工作。

我的界面如下所示:

export interface Element {
   uid:string;
   value:string;
}
export interface DocumentData {
    uid: string;
    elements: Map<string, Element>;
}

将这些写入文档不起作用,并且会失败并出现上述错误。

let documentData = {uid:"test_uid", elements: new Map([{"one", "test_string"}],[{"two", "test_string"}]]);
...
...
            .doc(documentData.uid)
            .set({documentData, {merge: true});

有人知道如何将 map 写入存储吗?这实际上是 map 的问题还是我使用的设置错误?

最佳答案

Firestore 仅接受包含要写入文档的字段和值的普通旧式 JavaScript 对象。它不接受 ES6 Map 对象,这完全不是一回事。

只需构建对象并将其传递给 set():

const data = {
    uid: "test_uid",
    elements: {
        one: "test_string",
        two, "test_string"
    }
}

set(data, {merge: true})

我建议咨询documentation了解更多示例。 Java 支持 map 对象,但 JavaScript 不支持。

上面的代码会发生什么,它将更新两个字段,一个“元素”将是 Firestore map 类型字段。

关于javascript - Firebase Javascript/Typescript map 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160121/

相关文章:

javascript - 如何使用JavaScript更改元素的类?

angular - 如果 'router-outlet' 是 Angular 组件,则验证它是否是该模块的一部分。 Angular 12

javascript - typescript 中是否有类似 C# "using"的功能?

swift - 使用 Swift 从 firebase 中提取数据

AngularFire2:找不到命名空间 "firebase"

database - 该文档不存在,不会出现在查询或快照中,但结构相同的文档有效

javascript - 将 req res 对象传递到 socket.io?

javascript - 是否可以仅使用客户端 Web 技术来编写社交网络?

javascript - 从 JavaScript 数组生成 2-opt 交换邻域

javascript - Typescript,无法加载内部模块