javascript 映射到 Firestore -> 错误:

尝试在 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-nesting


108:34 警告避免嵌套 promise promise/no-nesting


红颜莎娜
浏览 52回答 2
2回答

九州编程

就像错误消息指示的那样,您不能将地图插入数据库。解决方法是将其转换为 JSON 对象,如下所示:let myMap = {}; myMap[name] = totalScore.toString();那应该可以解决问题。108:34 警告避免嵌套 promise promise/no-nesting这是 ESLINT 被设置为避免 promise 嵌套的结果。我不知道功能结果中的潜在问题,但它确实使理解代码变得更加困难,并且在深度嵌套时可能会延长代码的运行时间。您可以使用 javascript async await 函数来消除嵌套所述承诺的需要。

哆啦的时光机

firestore 不支持 JS 映射。使用普通的 JS 对象并将它们插入数据库中,例如:let contact = {'Jessie':{phone: "213-555-1234", address: "123 N 1st Ave"}}// example overwrite a doc in firestoredb.collection("contacts").doc('test').set(contact)在此处查看所有支持的数据类型
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java