嘗試在 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
提交
取消