尝试在 javascript 中设置映射变量值以使用云函数将文档作为映射字段进行火存。它失败并出现错误 - 错误:参数“数据”的值不是有效的 Firestore 文档。输入不是普通的 JavaScript 对象(在field.map_field: myMap 中找到是导致问题的原因。那么如何在 firestore 文档中将 javascript map 设置为 map 字段?admin.firestore().collection("users").doc("test").set({ name: "Los Angeles", state: "CA", map_field: myMap // map variable })完整代码在这里:我正在聚合来自多个 firestore 文档的数据并尝试插入到一个新文档中。代码------------------------>exports.fxname= functions.https.onRequest((request, response) => { collectionRef = admin.firestore().collection('user/doccx/collx');let myMap = new Map();collectionRef.listDocuments().then(documentRefs => { console.log('Fetching each document:console log'); return admin.firestore().getAll(...documentRefs) .then(documentSnapshots => { for (let documentSnapshot of documentSnapshots) { let name = documentSnapshot.get('aa'); let totalScore= documentSnapshot.get('bb'); myMap.set(name, totalScore.toString()); } functions.logger.log("calculation done: "); console.log(Array.from(myMap) ); //prints values var keys = Object.keys(myMap); keys.forEach(key=>{ console.log(key + '|' + myMap[key]); //this is not printing any value });});与问题无关,但也低于警告。它与 .then 的嵌套有关。关于重写上述代码的任何建议?108:34 警告避免嵌套 promise promise/no-nesting108:34 警告避免嵌套 promise promise/no-nesting
2 回答
九州编程
TA贡献1785条经验 获得超4个赞
就像错误消息指示的那样,您不能将地图插入数据库。解决方法是将其转换为 JSON 对象,如下所示:
let myMap = {}; myMap[name] = totalScore.toString();
那应该可以解决问题。
108:34 警告避免嵌套 promise promise/no-nesting
这是 ESLINT 被设置为避免 promise 嵌套的结果。我不知道功能结果中的潜在问题,但它确实使理解代码变得更加困难,并且在深度嵌套时可能会延长代码的运行时间。您可以使用 javascript async await 函数来消除嵌套所述承诺的需要。
哆啦的时光机
TA贡献1779条经验 获得超6个赞
firestore 不支持 JS 映射。使用普通的 JS 对象并将它们插入数据库中,例如:
let contact = {'Jessie':{phone: "213-555-1234", address: "123 N 1st Ave"}}
// example overwrite a doc in firestore
db.collection("contacts").doc('test').set(contact)
在此处查看所有支持的数据类型
添加回答
举报
0/150
提交
取消