尝试使用javascript在云中将JavaScript中的地图变量值设置为将文档存储为地图字段,以将其存储为地图字段。它失败并显示错误-错误:参数“ data”的值不是有效的Firestore文档。输入不是普通的JavaScript对象(可在field中找到。
map_field:myMap引起了问题。那么如何在firestore文档中将javascript映射设置为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
});
admin.firestore().collection("users").doc("test").set({
name: "Los Angeles",
state: "CA",
country: myMap
}).then(function() {
functions.logger.info("Insert Successful !", {structuredData: true});
return;
})
.catch(function(error) {
functions.logger.error("Error writing document: ", error);
});
return;
}).catch(function(error) {
functions.logger.error("Error 1: ", error);
});
}).catch(function(error) {
functions.logger.error("Error 2: ", error);
});
response.send("Hello from Firebase Outside!");`enter code here`
});
与问题无关,但也低于警告。它与.then的嵌套有关。关于重写以上代码有什么建议吗?
108:34警告避免嵌套promises promise / no-nesting
108:34警告避免嵌套promises promise / no-nesting
答案 0 :(得分:0)
就像错误消息所指示的那样,不允许您将映射插入数据库。一种解决方法是将其转换为JSON对象,如下所示:
let myMap = {};
myMap[name] = totalScore.toString();
那应该可以解决问题。
108:34警告避免嵌套promises promise / no-nesting
这是ESLINT被设置为避免promise嵌套的结果。我不知道函数结果中的潜在问题,但是当深入嵌套代码时,确实会使理解代码更加困难,并且可能延长代码的运行时间。您可以使用javascript async await函数来消除嵌套所述promise的需要。
答案 1 :(得分:0)
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)