Ссылки Firestore создают "Ошибка типа: Преобразование круговой структуры в JSON"
Я использую Firebase Firestore внутри приложения Vue JS:
"firebase": "^5.8.0",
"vue-firestore": "^0.3.16",
Когда я пытаюсь выбрать документ, в котором есть поле, ссылающееся на другой документ (ссылочный тип в Firestore), я получаю следующую ошибку:
[Vue warn]: Error in render: "TypeError: Converting circular structure to JSON"
Всякий раз, когда я меняю тип этого поля в документе на строку, кажется, он работает нормально.
Я понимаю, что это из-за чего-то в JS SDK Firestore, которое пытается сериализовать документ (и набор метаданных, поставляемых вместе с документом) в JSON, и где-то есть циклическая ссылка?
В структуре и полях моих данных у меня нет круговой ссылки. Это просто одно поле, которое ссылается на другой документ, и на указанный документ больше нет ссылок на любой другой документ.
Мой код для извлечения данных:
methods: {
getContent() {
const db = this.$firebase.firestore();
db
.collection('places')
.doc(this.$route.params.placeKey)
.orderBy('name')
.get()
.then(snap => {
this.places = []
snap.forEach(doc => {
this.places.push(doc.data())
})
})
}
Итак, мои вопросы:
1) Прежде всего, я что-то неправильно делаю в своем коде? Даже если ошибка не возникла, JS SDK от Firestore разрешит эту ссылку для меня? Или мне нужно будет позвонить по ссылке и решить ее самостоятельно, чтобы получить данные ссылочного документа? 2) Как лучше всего использовать Firestore, когда у вас есть документы, на которые вы можете ссылаться? Вы должны использовать ссылки? Когда? Когда бы вы денормализовали?
Спасибо!
1 ответ
Чтобы ответить на ваш второй вопрос о хранении ссылок: на самом деле, на момент написания этого ответа нет реального преимущества хранения ссылок (т.е. элементов пути) как Reference
введите вместо хранения их в виде строки.
Пожалуйста, посмотрите это официальное видео из Firebase https://www.youtube.com/watch?v=Elg2zDVIcLo&t=274s которое содержит подробные объяснения (начиная с 4:34).