更新 cloud firestore 文档中的单个地图

2024-01-22

最终更新我从使用基于 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 });

Edit我根据下面 andresmijares 的评论更改了交易代码。

transaction.set(gradeDocRef, {merge: true}, {

但然后得到这个错误?

未知选项“UnitGrades”传递给函数 Transaction.set()。可用选项:合并、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!";
}

// update the grades using a transaction

   transaction.update(gradeDocRef, {

// in here is my error, I need to be able to select the map
// for the variable for UnitNo only and not wipe the other maps

    "UnitGrades": {

    [unitNo]: {

    "CG": CG,

    "PG": PG, 

    "TG": TG                                                }
});
});

}).then(function() {

console.log("Transaction successfully committed!");

}).catch(function(error) {

console.log("Transaction failed: ", error);
console.log(studentId);

});

我实现的代码更新了正确的单位映射,但随后擦除了其余的单位等级。我真正想要的是更新变量中标识的单位映射

UnitNo然后保持其余单元不变。

例如目前,如果我更新 IT1,这会正确更新地图内的成绩,但随后会从 UnitGrades 地图中擦除单位 IT2、IT3、IT12 等。我真的希望 IT2、IT3、IT12 等保持不变,而 IT1 使用新值进行更新。例如“F”更改为“P”


更改这些行:

transaction.update(gradeDocRef, {
    "UnitGrades": {
    [unitNo]: {
       "CG": CG,
       "PG": PG, 
       "TG": TG                                                }
});

for this

transaction.set(gradeDocRef, {
    `UnitGrades.${unitNo}`: {
       "CG": CG,
       "PG": PG, 
       "TG": TG 
}, { merge: true });

据我所知,它的工作原理如下:

假设你的文档看起来像这样:

 {
   "fantasticsFours": {
     "thing": { ... },
     "susan": { ... },
     "mister": { ... }
   }
 }

我们需要添加{"humanTorch" :{...}}

使用集合+合并

db.collection('heroes').doc(`xxxXXXxxx`).set({
  "fantasticsFours": {
    "humanTorch":{ ... }
  }
}, {merge:true})

将产生以下数据:

 {
   "fantasticsFours": {
     "thing": { ... },
     "susan": { ... },
     "mister": { ... },
     "humanTorch":{ ... }
   }
 }

有更新

db.collection('heroes').doc(`xxxXXXxxx`).update({
  "fantasticsFours": {
    "humanTorch":{ ... }
  }
})

将产生以下数据:

 {
   "fantasticsFours": {
     "humanTorch":{ ... }
   }
 }

More here https://cloud.google.com/nodejs/docs/reference/firestore/0.8.x/DocumentReference#update

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新 cloud firestore 文档中的单个地图 的相关文章

随机推荐

  • 在 Gstreamer 上流式传输 MP4 视频文件

    我第一次使用 gstreamer 并尝试使用 Gstreamer RTP 和 UDP 将 MP4 视频文件从服务器流式传输到客户端 我尝试使用的命令行 在服务器端 gst launch 1 0 v filesrc location file
  • 确定图像中的文本和图形区域

    我不知道我是否应该在这里发布这个问题 但如果有人知道请回答一下 用于确定图像中哪个区域是文本 哪个区域是图形的算法是什么 意味着如何分离这些区域 图或图 大多数 OCR 软件 例如Ocropus http code google com p
  • iOS 7 访问企业应用程序中的 UUID 值(不适用于 AppStore)

    Apple 自 iOS7 起已弃用且无法使用该属性 uniqueIdentifier 其他属性 identifierForVendor and advertisingIdentifier有一个大问题 他们在卸载并重新安装应用程序后更改了值
  • 视图和 $this 中的 Cakephp 助手

    我正在尝试确定在视图中使用助手的最佳标准是否应该 echo form gt input or echo this gt Form gt input 在 CakePHP 手册 1 2 版中 Helper 类是通过 helper 对象直接访问的
  • Scala Nil 相当于 Set

    是否有相当于Nil for Set在斯卡拉 我尝试使用Nil作为一个值Set 但我得到了一个错误 预期是因为类型Nil is List Thanks Set empty是那个集合吗 虽然你无法直接获取它 但事实证明它只是Set伴生对象 显然
  • 一个通用 Google Analytics(分析)代码中包含多个属性

    我正在尝试在我的网站中嵌入基于新的 Universal Analytics 方法的 GA 代码 我想要实现的是将数据从一个页面发送到多个属性 因此 我检查了有关新通用 GA 代码的官方 GA 文档 特别是有关 使用多 个跟踪对象 的部分 h
  • R 根据另一列的因子水平创建新的值列[重复]

    这个问题在这里已经有答案了 我正在尝试根据另一列的值创建一个新的值列 如果 iucnStatus 列中的值为 LC 或 NT 我希望新列 受威胁 中的值为 Not Threatened 如果 iucnStatus 中的值为 VU EN CR
  • 我可以在 Subversion 中关闭自动合并吗?

    我们正在考虑从版本控制系统的签出 编辑 签入风格转向 Subversion 在评估过程中我们发现 当您在 TortoiseSVN 可能还有任何 Subversion 客户端 中执行更新操作时 如果存储库中需要应用于您正在编辑的文件的更改不会
  • 在运行时更改类类型

    我有两个课程 我们称它们为A and B 两者都继承自一个共同的超类 C 假设我需要建立一个List of Cs 我的问题是 根据收到的数据C的构造函数我需要放一个A or B列表内的对象 有没有办法从内部做到这一点C的构造函数 或者 我该
  • 如何从 Gradle 启用 Eclipselink 的静态编织

    我想为 Gradle 中的 JPA 类启用 Eclipselink 的静态编织 Eclipselink 文档解释了如何在 Ant 任务中执行此操作
  • 使用EChart.JS绘制水平目标线

    我想使用 EChart JS 绘制一条水平目标线 显示折线图 条形图和饼图上的阈值限制 https ecomfe github io echarts doc public en index html https ecomfe github
  • 构建iOS自定义通用框架,其中包括其他框架

    我正在尝试构建一个社交媒体集成框架 以便开发人员可以导入此框架 调用此框架中的 API 并在他们的应用程序中进行社交媒体操作 而不必导入和处理多个 SDK 及其代码 如下这个写得很精彩的教程 https github com jverkoe
  • 定期执行 PHP 脚本的最佳方法?

    如果我可以完全访问服务器 我可能会找到一种方法来做到这一点 但问题是它只是一个托管服务 除了FTP访问 我想定期运行 PHP 脚本来检查过时 损坏的内容 聚合新内容 删除未使用的文件等 但是该脚本可以采取长达 60 秒执行 由于内容聚合 我
  • 如何在闪亮的仪表板中以特定时间间隔将新行重新绑定到数据表?

    我正在创建一个有 2 个输出的闪亮应用程序datatableoutput and plotoutput 我有2个变量st and et在将初始化为值的数据框中 我需要向具有以下逻辑的现有数据框添加新行1 新st值是之前的值et 2 新et值
  • 亚马逊 S3 CORS 错误

    当我的应用程序通过 amazon S3 上的 Javascript 请求文件时 我收到了权限被拒绝的错误 我设置了一个 CORS 文件 它似乎在大多数情况下都可以工作 但会间歇性地失败 我总是可以通过清除浏览器缓存来解决这个问题 关于这可能
  • 将 DataFrame 保存为 cvs 时 Spark 2.0 DataSourceRegister 配置错误

    我正在尝试将数据帧保存到 Spark 2 0 Scala 2 11 中的 cvs 从 Spark 1 6 迁移代码的过程 sparkSession sql SELECT FROM myTable coalesce 1 write forma
  • 为什么转置 512x512 矩阵比转置 513x513 矩阵慢得多?

    在对不同大小的方阵进行一些实验后 出现了一个模式 总是 转置大小矩阵2 n比转置某一尺寸慢2 n 1 对于较小的值n 差别并不大 然而 超过 512 的值就会出现很大的差异 至少对我来说 免责声明 我知道由于元素的双重交换 该函数实际上并未
  • 如何通过“外键”关系组合json对象

    我有从两个不同的休息资源返回的两个对象 id 1 username jdoe role id 1 role developer members 1 3 5 我想使用普通的 ole javascript 将这两个对象组合成一个 id 位于成员
  • 是否可以从外部 ExtendScript 执行 JSX 脚本?

    通常 当您编写 jsx 脚本来自动化 Adob e 产品 如 InDesign Illustrator 或 Photoshop 时 您可以从 ExtendScript IDE 编写 调试和执行脚本 是否可以绕过 ExtendScript 并
  • 更新 cloud firestore 文档中的单个地图

    最终更新我从使用基于 andresmijares 的以下答案的事务更改为使用 set 现在我可以将数据写入数据库 var gradeDocRef db collection students doc studentId console lo