Firebase:如何在typescript/cloud函数中创建或访问映射



我的文档中有一个映射。让我们称之为地图。结构看起来像这个

-document
-map
{id: number}
{id2: number2}

现在,函数第一次执行时只存在文档,我想用第一个条目创建映射。

首次执行之前

-document

首次执行后

-document
-map
{id: number}

现在,每当使用id执行此操作时,我都会增加存储在地图中的数字

但是,如果id不在映射中,则会插入它。

例如,用id2调用它将产生开头所示的结构。

await admin.firestore().runTransaction(async t => {
const documentDb= await admin.firestore().doc(`document/${documentId}`).get()
const document= documentDb.data()!
if (document.map === undefined || document.map[id] === undefined) {
const tempMap = {}; 
tempMap[id] = 1
document.map = tempMap
}else{
document.map[id] = document.map[id]+1
}
t.update(documentDb.ref, document);
}

这不起作用(实际上它甚至不编译。Typescript在这里抱怨tempMap[id] = 1,因为它有一个隐含的"任意"类型。我该如何实现这个(我想真的很简单(任务?

const tempMap : { [key: string]: any } = {}应该解决您的";任何";类型

此外,请注意,您不应该为了获得文档而执行documentDb = await admin.firestore().doc(`document/${documentId}`).get(),而是使用事务的get()方法:

const documentRef = admin.firestore().doc(`document/${documentId}`);
const snapshot = await t.get(documentRef);
const document= snapshot.data()!;
//...

更新:如何更新地图

const id = ...;
const updatePath = 'map.' + id;    // or id.toString(10) 
const obj = {};
obj[updatePath] = document.map[id] + 1;
t.update(documentDb.ref, obj);

相关内容

  • 没有找到相关文章

最新更新