Как представить иерархические данные в Cloud Firestore с помощью структуры? - PullRequest
1 голос
/ 07 августа 2020

Я изучал , как иерархические данные работают в Cloud Firestore , и мне было интересно, как это лучше всего преобразовать в структуру Go.

В связанном примере там представляет собой набор комнат чата, и каждый документ комнаты чата имеет два поля: имя и набор сообщений.

Будет ли следующий способ представления комнаты чата с использованием структуры go, учитывая что будут довольно частые операции записи и чтения из коллекции сообщений? Я также хотел бы получить доступ к сообщениям в коллекции в коде Go.

type ChatRoom struct {
    Name     string
    Messages *firestore.CollectionRef
} 

Это определение, кажется, компилируется и работает нормально, но мне было интересно, есть ли лучшие или более идиоматические c способы сделать это.

1 Ответ

1 голос
/ 07 августа 2020

В документах не упоминается, что CollectionRef поддерживается в документе. Так что я не уверен, что это сработает. Вы можете увидеть, что я имею в виду здесь .

С другой стороны, я не думаю, что вы действительно что-то получите от этого, поскольку вы можете получить доступ к коллекции, выполнив следующие действия.

client.Collection("chatroom/" + <NAME> + "/messages")

Также я не думаю, что это хорошая практика связывать тип высокого уровня, такой как ChatRoom, с реализацией firestore. Поэтому я бы удалил его и создал интерфейс, который скрывает детали того, как хранятся чат-комнаты и сообщения. Вы можете сделать что-то вроде этого.

type Repo interface {
    GetChatRoom(name string) (ChatRoom, error)
    GetMessages(name string) ([]Messages, error)
}
...