Firebase Javascript / Typescript 地图兼容性

Sol*_*sus 2 javascript firebase typescript google-cloud-firestore

当我尝试将地图写入 firebase 时,我遇到了以下错误:

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

我想将地图而不是数组写入 firebase,以便能够在不覆盖整个数组的情况下合并数据集,而只添加或删除地图的条目。但是,即使 firebase 文档说它支持地图,我也无法使地图正常工作。

我的界面是这样的:

export interface Element {
   uid:string;
   value:string;
}
export interface DocumentData {
    uid: string;
    elements: Map<string, Element>;
}
Run Code Online (Sandbox Code Playgroud)

将它们写成文档不起作用,并因上述错误而失败。

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

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

Dou*_*son 5

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

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

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

set(data, {merge: true})
Run Code Online (Sandbox Code Playgroud)

我建议查阅文档以获取更多示例。Java 支持 Map 对象,但 JavaScript 不支持。

上面的代码会更新两个字段,一个“元素”将是一个 Firestore 地图类型字段。