我的文档中有一个映射。让我们称之为地图。结构看起来像这个
-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);