Ссылки 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).

Другие вопросы по тегам