为了账号安全,请及时绑定邮箱和手机立即绑定

javascript 映射到 Firestore -> 错误:

javascript 映射到 Firestore -> 错误:

红颜莎娜 2022-12-22 08:56:51
尝试在 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 函数来消除嵌套所述承诺的需要。


查看完整回答
反对 回复 2022-12-22
?
哆啦的时光机

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)

在此处查看所有支持的数据类型


查看完整回答
反对 回复 2022-12-22
  • 2 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信