Ссылки Firestore создают «Ошибка типа: Преобразование круговой структуры в JSON» - PullRequest
0 голосов
/ 29 января 2019

Я использую 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"

Всякий раз, когда я меняю тип этого поля в документе на строку, кажется, что он работает нормально.

Я понимаю, что это происходит из-за чего-то в Firestore JS SDK,Попытка сериализации документа (и набора метаданных, поставляемых вместе с документом) в 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 Ответ

0 голосов
/ 29 января 2019

Чтобы ответить на ваш второй вопрос о хранении ссылок: на самом деле, на момент написания этого ответа , нет реального преимущества хранения ссылок (т.е. элементов пути) как Reference вместо того, чтобы хранить их как String.

Пожалуйста, посмотрите это официальное видео с Firebase https://www.youtube.com/watch?v=Elg2zDVIcLo&t=274s, которое содержит подробные объяснения (начиная с 4:34).

...