【发布时间】:2020-12-14 01:18:24
【问题描述】:
我有一个 map 类型的字段,其中包含 firestore 中的数据映射。
我正在尝试使用 node.js 中的云函数检索这些数据。我可以从字段中获取文档和数据,但我无法以可用的方式获取它。我已经尝试了我可以在 SO 和 google 上找到的所有解决方案,但下面是唯一可以让我访问数据的代码。我显然需要能够单独访问地图中的每个字段。在swift中我构建了一个String数组:Any,但我可以让它在Node.JS中工作
const docRef = dbConst.collection('Comps').doc('XEVDk6e4AXZPkNprQRn5Imfcsah11598092006.724980');
return docRef.get().then(docSnap => {
const tagets = docSnap.get('targets')
console.log(tagets);
}).catch(result => { console.log(result) });
这就是我在控制台中返回的内容。
在 Swift 中,我执行以下操作,但目前无法在 typescript 中找到等效项。 (我不需要构建自定义对象,只需能够访问键和值)
let obj1 = doc.get("targets") as! [String:Any]
for objs in obj1{
let obs = objs.value as! [String:Any]
let targObj = compUserDetails(IDString: objs.key, activTarg: obs["ActivTarget"] as! Double, stepTarg: obs["StepTarget"] as! Double, name: obs["FullName"] as! String)
更新 在花了一整天的时间研究它之后,我认为我有一个使用以下方法的解决方案:
const docRef = dbConst.collection('Comps').doc('XEVDk6e4AXZPkNprQRn5Imfcsah11598092006.724980');
return docRef.get().then(docSnap => {
const tagets = docSnap.get('targets') as [[string, any]];
const newDataMap = [];
for (let [key, value] of Object.entries(tagets)) {
const tempMap = new Map<String,any>();
console.log(key);
const newreWorked = value;
tempMap.set('uid',key);
for(let [key1, value1] of Object.entries(newreWorked)){
tempMap.set(key1,value1);
newDatMap.push(tempMap);
};
};
newDatMap.forEach(element => {
const name = element.get('FullName');
console.log(name);
});
但是,新的数据映射有 6 个单独的映射对象。来自云的每个原始对象的 3 个。我现在可以遍历并获取给定键的数据,但我有 3 倍的对象。
【问题讨论】:
-
所以每次运行控制台都会随机输出?
-
您的日志输出看起来与您的代码不匹配。每个日志行都包含字符串“testingProcess”,但我在您的代码中的任何地方都看不到它。无论如何,您正在记录的对象中肯定有数据,我认为输出会向您建议如何访问对象的字段。我不清楚你在哪里卡住只是访问你正在记录的对象的属性。
-
@DougStevenson testingProcess 是函数的名称。
-
@Gieted 是的,每次我运行它时,我都会以不同的顺序获得日志输出,它永远不会作为一个对象记录为多行。
标签: node.js typescript google-cloud-firestore google-cloud-functions