typescript - Firestore 云功能:嵌套地图中的动态键
问题描述
在 Firestore 中,我有一个由 UID 组成的文档,每个 UID 都包含一个键值对的嵌套映射。我需要使用 Firebase 云功能向文档添加一个新条目,并且我正在使用 Typescript。我找不到将动态键设置为嵌套字段的方法。使用静态键它可以工作:
firestoredocument.set({
thisIsStatic : {
nestedField: "value"
}
}, {merge: true})
但是使用动态密钥,它会将动态密钥输出到 Firestore,其中没有任何数据(动态值:{})
var dynamic = "dynamicValue"
firestoredocument.set({
[dynamic] : {
nestedField: "value"
}
}, {merge: true})
打印输入对象会输出;{"dynamicValue":{"nestedField":"value"}} 但在文档中 dynamicField 的值为空。
我也尝试使用 .update() 而不是 .set() 获得相同的结果。
将嵌套 Map 输入到函数输出错误:
未处理的错误 错误:Update() 需要单个 JavaScript 对象或字段/值对的交替列表,可以后跟可选的前置条件。参数“dataOrField”的值不是有效的 Firestore 文档。输入不是普通的 JavaScript 对象。
编辑:
根据建议,我也尝试过:
const dynamic = 'dynamicValue'
const str1 = JSON.stringify({staticValue : { nestedField: "value" }})
const str2 = JSON.stringify({[dynamic] : { nestedField: "value" }})
functions.logger.log(str1)
functions.logger.log(str2)
await admin.firestore().doc('mydocumentpath')
.set(JSON.parse(str1))
await admin.firestore().doc('mydocumentpath')
.update(JSON.parse(str2))
这将注销:
{"staticValue":{"nestedField":"value"}}
{"dynamicValue":{"nestedField":"value"}}
但无论 str1 和 str2 更新顺序如何,Firestore 文档都会如下所示:
staticValue: {
nestedField: "value"
}
dynamicValue: {}
解决方案
推荐阅读
- mongodb - MongoDB 文档设计决策
- java - 为 java 类名中的非标准字符启用 Intellij IDEA 支持
- java - Java FizzBuzz 1 行
- python - on_mouse_down 调用每个按钮(甚至滚轮移动)
- c - 在 C 中通过联合指针进行类型双关是否合法?
- java - 如何构建一个索引数组,从最高到最低表示不同数组的值?
- sql - 遍历一个嵌套的json对象,将键和值插入到两个相关的表中
- javascript - 创建一个函数 toGradePoints(),它将字母等级数组作为输入并返回相应的等级点数组
- java - 如何在 Java 中在 Backendless 上上传图像?
- python - 如何使用python实现for循环?