typescript - 如何在使用 TypeScript 编码的 cloudFunction 中更新 Firestore 中的地图
问题描述
我想使用在 Typescript 中输入的云函数更新 Firestore 中的地图,所以我编写了这段代码,但它不起作用:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
exports.sendNote = functions.https.onCall(async(data,context)=>{
const numeroSender: string = data['numeroSender'];
const amisA = admin.firestore().collection('Amis').doc(numeroReceiver);
const connaissanceABBA:number = 3.0;
const version:number = 1;
await amisA.update({
'amis.${numeroSender}' : [connaissanceABBA,version]
});
});
编辑器不会用它的值替换 numeroSender ,我也尝试过:
'amis.'+numeroSender
并且编辑询问分号并显示许多其他错误。即使我尝试过这种方式:
const mapA: string = ("amis."+numeroSender);
console.log(mapA);
await amisA.update({
mapA : [connaissanceABBA,version]
});
控制台显示正确的字符串,但更新函数不会读取 mapA 值,而是使用字符串“mapA”执行。
解决方案
你可以做:
await amisA.update({
[`amis.${numeroSender}`] : [connaissanceABBA, version]
});
在 ES6 中(因此也在 TypeScript 中)您可以使用ComputedPropertyName,如语言规范中所示:http: //www.ecma-international.org/ecma-262/6.0/#sec-object-initializer
请注意,在 ES5 中,您必须使用方括号表示法执行以下操作:
var obj = {};
obj[`amis.${numeroSender}`] = [connaissanceABBA, version];
amisA.update(obj);
另请注意,这将按预期使用该update()
方法,因为“字段可以包含点以引用文档中的嵌套字段”。但是,JavaScript 代码中的结果对象可能并不完全符合您的预期。您可以通过执行以下操作来查看它:
var obj1 = {
[`amis.${numeroSender}`] : [connaissanceABBA, version]
}
console.log(JSON.stringify(obj1));
最后请注意,模板文字用反引号括起来,例如:
`amis.${numeroSender}`
不喜欢:
'amis.${numeroSender}'
如您的问题所示。
推荐阅读
- react-native - 将项目推送到一个 constant.js 到 reactnative 并从不同的文件中提取
- javascript - 到达某个 X 位置后停止移动背景图像
- python - 无法加载具有相应日期的日历
- macros - Racket - 是否可以在单个文件中定义和使用相同的语言?
- html - Flex:使孩子具有相同高度的绝对兄弟姐妹
- tfs - 如何使用 Web 代理配置 TFS 构建代理
- css - 未应用 CSS 变量
- java - 如何从接受泛型枚举的方法返回泛型枚举?
- python - 在 Pandas 数据框中显示字符串
- spring-boot - ServletRequestParameter 异常,参数不存在