【问题标题】:Adding Nested Objects Arrays to Firestore将嵌套对象数组添加到 Firestore
【发布时间】:2019-01-26 22:44:47
【问题描述】:

我有一个名为 Pages 的数组。我的应用程序允许用户将页面对象添加到页面数组。然后将数据发送到 Firestore。我尝试使用 For 循环遍历数组中的每个对象并将其发送到 Firestore,但它似乎不起作用。我究竟做错了什么?

(我使用 Mobx 而不是 state 来存储信息,这就是为什么我没有在任何地方提到 this.state)

     let id = Math.floor(Math.random() * 10000);
     let docTitle = this.projectTitle.title;

     for(let i = 0; i > this.pages.length; i++){

     let pageT = this.pages[i].pageTitle;
     let pageD = this.pages[i].pageDesc;

     db.collection(docTitle + id).doc(pageT).set({
         page: {pageTitle:pageT, pageDesc: pageD, blocks:['item', 'item'], id:'' }
       })
       .then(function() {
         console.log("Document successfully written!");
       })
       .catch(function(error) {
         console.error("Error writing document: ", error);
       });

     }

【问题讨论】:

    标签: reactjs firebase google-cloud-firestore


    【解决方案1】:

    使用forEach 接受的答案是使用n(数组长度)更多的写入操作为每个数组值创建请求效率低下。 (更不用说在每次写入时使用await 所花费的时间)。

    我正在使用 NodeJS/Javascript,所以这在 React 中也应该可以工作,但可能需要稍作修改,关键是 ...(getSearchSubstrings 返回一个数组):

    db.collection(x).doc(y).update({
       accountSearch: admin.firestore.FieldValue.arrayUnion(...getSearchSubstrings(username))
    })
    

    根据他们的Update elements in a array 文档,有两种方法:

    // To add or remove multiple items, pass multiple arguments to arrayUnion/arrayRemove
    const multipleUnionRes = await washingtonRef.update({
      regions: admin.firestore.FieldValue.arrayUnion('south_carolina', 'texas')
      // Alternatively, you can use spread operator in ES6 syntax
      // const newRegions = ['south_carolina', 'texas']
      // regions: admin.firestore.FieldValue.arrayUnion(...newRegions)
    });
    

    【讨论】:

      【解决方案2】:
      1. 使用 forEach(在 i 等中不需要)
      2. 在机器人文档和对象内部重复的键。不要使用标题作为键。
      3. 您要保存的扁平对象。

      【讨论】:

      • 成功了,谢谢。我将如何添加每个对象具有的“块”数组?这会导致错误。
      • 尝试使用 firestore 文档 firebase.google.com/docs/firestore/manage-data/… 中的数组方法以及他们博客 firebase.googleblog.com/2018/08/… 中有关数组的最新更新
      • 这似乎允许我将单个项目添加到数组中,但不允许我添加整个数组。我想我需要找到某种方法将数组分成单独的变量,然后添加它们。我收到一个错误:FirebaseError: Function FieldValue.arrayUnion() 使用无效数据调用。不支持嵌套数组
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多