最终更新 我从使用基于以下来自 andresmijares 的答案的事务更改为使用 set()。这现在允许我将数据写入数据库。var gradeDocRef = db.collection("students").doc(studentId); console.log(gradeDocRef); var setWithMerge = gradeDocRef.set({ "UnitGrades": { [unitNo]: { "CG": CG, "PG": PG, "TG": TG } } }, { merge: true });编辑 我根据下面来自 andresmijares 的评论更改了交易代码。transaction.set(gradeDocRef, {merge: true}, {但是然后得到这个错误?传递给函数 Transaction.set() 的未知选项“UnitGrades”。可用选项:merge、mergeFields我有一个包含学生集合的云 Firestore 数据库。每个学生集合都包含一个带有地图和子地图的学生文档,如下所示UnitGrades: { IT1: { CG: "F" PG: "F" TG: "F" id: "IT1" name: "Fundamentals of IT" type: "Exam" }我在地图中有 10 个单位 UnitGrades 每个学生都有相同的单位组合我想根据 bootstrap 中的 HTML 表单更新地图(表单正在工作,加上很长,所以不要把它放在这里)即改变学生成绩我使用了 firestore 事务更新文档,并稍作调整以从 HTML 表单中获取数据。let studentId = $(this).attr("data-student-id");let unitNo = $(this).attr("data-unit");let CG = $(this).attr("data-CG");let PG = $(this).attr("data-PG");let TG = $(this).attr("data-TG");// Create a reference to the student doc.var gradeDocRef = db.collection("students").doc(studentId);console.log(gradeDocRef); return db.runTransaction(function(transaction) {// This code may get re-run multiple times if there are conflicts. return transaction.get(gradeDocRef).then(function(gradeDoc) { if (!gradeDoc.exists) { throw "Document does not exist!";}我实现的代码更新了正确的单位映射,但随后擦除了其余的 UnitGrades。我真正想要的是更新变量中标识的单位图UnitNo 然后保持其余的单位不变。例如,目前如果我更新 IT1,这会正确更新地图中的等级,但随后会从 UnitGrades 地图中擦除单元 IT2、IT3、IT12 等。我真的希望 IT2、IT3、IT12 等保持原样,并且 IT1 使用新值进行更新。例如“F”变成“P”
添加回答
举报
0/150
提交
取消