【问题标题】:Firestore add data over an object within a document's data REACT.JSFirestore 在文档数据 REACT.JS 中的对象上添加数据
【发布时间】:2021-09-22 14:49:08
【问题描述】:

我想在 bookChapters 对象上添加一些数据,比如随机 id 和其中的章节名称,我尝试了这个但它不起作用,在我添加了以前的数据之后我还想添加一个新对象“takeAways”,与前一个一样,位于随机 id 对象内。

export const createNewChapter = (bookId, inputText) => {
  return async dispatch => {
    dispatch(createNewChapterStart());
    try {
firebase
        .firestore()
        .doc(`Users/${bookId}/bookChapters/${inputText}`)
        .onSnapshot(querySnapshot => {
          //There I want to add the chapters to the firestore database
        });
      dispatch(createNewChapterSuccess(inputText));
    } catch (error) {
      dispatch(createNewChapterFail(error));
      console.log(error);
    }
  };
};

【问题讨论】:

  • 我看不到任何与更新数据相关的代码。您能否分享您文档的屏幕截图并说明您要在哪里更新/添加数据?
  • 对不起,我忘记了图片
  • BookChapters 不是一个集合。 .doc(`Users/${bookId}/bookChapters/${inputText}`) 应该是 .doc(`Users/${bookId}`)
  • 我有 2 个错误:1) 在控制台 FirebaseError: Invalid collection reference。集合引用必须有奇数个段,但 Users/ygWiDwAAQBAJ 有 2 个。
  • 您问题中的代码显示了您将如何阅读地图中的章节(bookChapters 字段)。但是你想如何填充/初始化这个字段?有章节列表吗?你确定钥匙应该是完全随机的吗?没有章节顺序?

标签: reactjs firebase google-cloud-firestore redux-firestore


【解决方案1】:

我想知道如何从头开始添加 bookChapters 对象

数据库截图显示bookChapters对象是一张地图。因此,要添加(填充)这个对象,您需要生成一个简单的 JavaScript 对象,其中包含一些属性作为“键:值”对。

沿着这些思路,假设章节标题在一个数组中:

  function arrayToObject(arr) {
    var obj = {};
    for (var i = 0; i < arr.length; ++i) {
      obj[i] = arr[i];
    }
    return obj;
  }

  const chapterList = ['Intro', 'Chapter 1', 'Chapter2', 'Conclusion'];
  const bookChaptersObj = arrayToObject(chapterList);

  firebase.firestore().doc(`Users/${bookId}`).update(bookChaptersObj);

或者,如果文档不存在:

firebase.firestore().doc(`Users/${bookId}`).set(bookChaptersObj, {merge: true});

【讨论】:

  • 我有这个错误:TypeError: querySnapshot.forEach is not a function,我该如何解决?我刚刚更新了最新答案的代码
  • 这是正常的:使用firebase.firestore().doc(Users/${bookId}),您定义的是DocumentReference,而不是Query。因此,当您使用onSnapshot 设置侦听器时,传递给匿名函数的参数是DocumentSnapshot(而不是QuerySnapshot),而DocumentSnapshot 没有forEach() 方法。我不完全明白你想用“从firestore存储旧章节”做什么......你可以用一些图表或屏幕截图(之前/之后)解释你的确切目标是什么,因为我不清楚。
  • 另外,请不要使用您的新代码创建新答案:请编辑您的初始问题并将代码附加到末尾。另外,如果我的问题对你有帮助,请点赞,见What should I do when someone answers my question?
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
相关资源
最近更新 更多