如何在云端防火墙中更改对象内的值?

时间:2018-03-12 22:41:56

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

我有一个名为'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 (?
  }

1 个答案:

答案 0 :(得分:0)

您无法访问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);
  });
}