【问题标题】:How to change a value inside an object in cloud firestore?如何更改云 Firestore 中对象内的值?
【发布时间】:2018-03-12 22:41:55
【问题描述】:

我有一个名为“tasks”的集合,每个文档都有一个名为“resolver”的对象数组,其中包含 14 个元素,因此结构如下所示:

tasks
  --resolver
    --1: false
    --2: false
    .
    .
    .
    --14: false

如何将其中的任何项目更改为 true?

我试过这个:

  updateElement(task: Task) {
    var ref = this.afs.doc(`tasks/${task.id}`).collection('resolver').doc('7'); <--Element 7 (?
    return ref.update(true) <-- Set to true (?
  }

【问题讨论】:

  • 7是字符串还是数字?在您的参考文献中,它是一个字符串。你有任何错误吗?会发生什么而不是预期的操作?
  • 7 是“解析器”对象中的一个数字,但我的方法不适用于 7 或“7”
  • 当你说它不起作用时,会发生什么?

标签: firebase firebase-cloud-messaging google-cloud-firestore


【解决方案1】:

您无法访问 Firestore 文档中的字段,就像在 RTDB 中一样。您需要获取文档,编辑resolver 对象并将其写回原始文档。如果要确保没有其他代码同时修改,请将其包装在事务中。

这是一个使用 Node SDK 的示例。您可以对其进行修改以适应您的环境。

updateElement(task) {
  let taskRef = firestore.doc(`tasks/${task.id}`);
  return firestore.runTransaction(taskTransaction => {
    return taskTransaction.get(taskRef)
      .then(taskDoc => {
        let resolver = taskDoc.data().resolver;
        resolver.7 = true;
        taskTransaction.update(taskRef, resolver)
      })
  })
  .then(result => {
    console.log('Transaction success!');
  })
  .catch(err => {
    console.log('Transaction failure:', err);
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多