【问题标题】:Batched write to Firebase Cloud Firestore failed due to wrong type由于类型错误,批量写入 Firebase Cloud Firestore 失败
【发布时间】:2021-03-31 10:09:30
【问题描述】:

我正在尝试对我的数据库执行批量写入。但是data[] 似乎有问题,因为我收到此错误:

FirebaseError: Expected type 't', but it was: a custom e object

守则:

<template>
  <div>
    <v-btn @click="setData()">
      Write to Firestore
    </v-btn>
    <router-view/>
  </div>
</template>

<script>
 import { db } from '@/firebase'

export default {
  methods: {
    setData() {
      
    var data = 
      [
        { 
          'title':'Ipsum lorem',
          'description':'Some text...',
          'color':'#03A9F4',
          'meta': 
            { 
              'docID':'',
              'createdBy':'', 
            }
        },
        { 
          'title':'Loren ipsum',
          'description':'Some more text...',
          'color':'#06A1F3',
          'meta': 
            { 
              'docID':'',
              'createdBy':'', 
            }
        }
      ]

      var batch = db.batch()
      data.forEach((doc) => {
        var dbRef = db.collection('teams').doc('team01').collection('templates')
        batch.set(dbRef, doc)
      })
      batch.commit().then(function() {
        return console.log("done")
      });
    }
  }
}
</script>

在我的文件data[] 中包含的对象比此处显示的要多。它们低于 500 的限制。这是在我的 Vue.js 应用中使用 Vuetify 完成的。

  1. 我该如何解决这个问题?
  2. 如何添加创建的每个文档的 id/reference 并将其放入 meta.docID我无法让它与批量写入一起使用。

感谢您的帮助,谢谢!

【问题讨论】:

    标签: javascript firebase vue.js google-cloud-firestore


    【解决方案1】:

    您的 dbRef 是一个 CollectionReference 对象:

    var dbRef = db.collection('teams').doc('team01').collection('templates')
    

    将 CollectionReference 传递给set() 是无效的:

    batch.set(dbRef, doc)   // this isn't valid
    

    正如您从 API 文档中看到的,set() 需要 DocumentReference 作为其第一个参数,因此您需要识别要写入的文档才能调用它。这意味着您需要找出要在此处写入的文档的唯一 ID。例如:

    var dbRef = db
        .collection('teams')
        .doc('team01')
        .collection('templates')
        .doc("what-is-your-document-id?")
    

    如果您需要一个随机文档 ID,您可以简单地在调用 doc() 时不提供任何参数:

    var dbRef = db
        .collection('teams')
        .doc('team01')
        .collection('templates')
        .doc()
    

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      相关资源
      最近更新 更多