#javascript #firebase #vue.js #google-cloud-firestore
# #javascript #firebase #vue.js #google-cloud-firestore
Вопрос:
Я пытаюсь выполнить пакетную запись в свою базу данных. Однако, похоже, проблема в 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.
- Как я могу решить эту проблему?
- Как я могу добавить идентификатор / ссылку каждого созданного документа и вставить его
meta.docID
? я не могу заставить это работать с пакетной записью.
Любая помощь приветствуется, спасибо!
Ответ №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 в качестве первого аргумента, поэтому вам нужно будет определить документ для записи, чтобы вызвать его. Это означает, что вам нужно будет определить уникальный идентификатор документа для записи здесь. Например:
var dbRef = db
.collection('teams')
.doc('team01')
.collection('templates')
.doc("what-is-your-document-id?")
Если вам нужен случайный идентификатор документа, вы можете просто не указывать аргументы в вызове doc()
:
var dbRef = db
.collection('teams')
.doc('team01')
.collection('templates')
.doc()