首页 > 解决方案 > 如何更新firebase cloud firestore中对象内的值?

问题描述

我有这个图像中的数据结构。我需要将布尔值从 true 更新为 false。

这是我执行更新的功能,但它不起作用......

worldIndex 和 levelIndex 一个数字。

export const setLevelPassed = (worldIndex, levelIndex) => new Promise(async (resolve, reject) => {
  try {
    await firestore()
      .collection(auth().currentUser.uid)
      .doc('gameDetails')
      .update(gameData[worldIndex].questions[levelIndex].isLocked = false);
    resolve();
  } catch (e) {
    reject(e);
    console.log('setLevelPassed', e);
  }
});

在此处输入图像描述

我也尝试过这种方式,但它不起作用:

export const setLevelPassed = (worldIndex, levelIndex) => new Promise(async (resolve, reject) => {
  try {
    await firestore()
      .collection(auth().currentUser.uid)
      .doc('gameDetails')
      .update(`gameData[${worldIndex}].questions[${levelIndex}].isLocked`, false);
    resolve();
  } catch (e) {
    reject(e);
    console.log('setLevelPassed', e);
  }
});

标签: javascriptfirebasereact-nativegoogle-cloud-firestore

解决方案


要更新 firebase cloud firestore 中的字段,您必须编写

.update({ 字段:值,字段:值,... })

export const setLevelPassed = (worldIndex, levelIndex) => new Promise(async (resolve, reject) => {
  try {
    await firestore()
      .collection(auth().currentUser.uid)
      .doc('gameDetails')
      .update({gameData[worldIndex].questions[levelIndex].isLocked: false});
    resolve();
  } catch (e) {
    reject(e);
    console.log('setLevelPassed', e);
  }
});

推荐阅读