firebase - 迭代firestore中的集合和子集合
问题描述
我试图找到一种更有效的方法来迭代集合及其在firestore中的子集合,而不是嵌套的for循环。我有一个名为 Place 的集合,其中包含一个子集合 Ticket。
这些是我正在使用的两个结构:
type Place struct {
PlaceName string `json:"placeName"`
PlaceLocation string `json:"placeLocation"`
PhoneNumber string `json:"phoneNumber"`
NumTickets []Ticket `json:"numTickets"`
}
type Ticket struct {
TicketType string `json:"ticketType"`
NumberTicketsAvail int64 `json:"numberTicketsAvail"`
}
而且,这是我目前拥有的一段代码:
func (*repo) FindAll() ([]entity.Place, error) {
ctx := context.Background()
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
log.Fatalf("Failed to create a firestore client: %v", err)
return nil, err
}
defer client.Close()
var places []entity.Place
it := client.Collection(collectionName).Documents(ctx)
for {
doc, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("Failed to iterate: %v", err)
return nil, err
}
ticketRef := doc.Ref.Collection("Ticket")
var tickets []entity.Ticket
it := ticketRef.Documents(ctx)
for {
doc, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("Failed to iterate over tickets: %v", err)
return nil, err
}
ticket := entity.Ticket{
TicketType: doc.Data()["TicketType"].(string),
NumberTicketsAvail: doc.Data()["NumberTicketsAvail"].(int64),
}
tickets = append(tickets, ticket)
}
place := entity.Place{
PlaceName: doc.Data()["PlaceName"].(string),
PlaceLocation: doc.Data()["PlaceLocation"].(string),
PhoneNumber: doc.Data()["PhoneNumber"].(string),
NumTickets: tickets,
}
places = append(places, place)
}
return places, nil
}
解决方案
推荐阅读
- python-3.x - 在我已经定义名称时出现 NameError。[课程]
- python - 如何在 PostgreSQL DB 优化方法中使用 morgrify psycopg2 最佳方法从数据框中插入 11M 记录
- c# - 在 C# 中使用 LINQ 在列表列表中查找和更新值
- javascript - 检测用户何时使用 CSS resize 调整 Div 大小:两者
- c# - JsonSerializationException:无法创建和填充列表类型
- ibm-midrange - 如何获取程序列表和服务程序已为特定库绑定了给定的 RPGLE 模块
- python - Boto3:将数据插入dynamodb表
- java - 如何为映射器类编写 Junit 测试用例
- sharepoint-online - 我在线使用 SharePoint。我在哪里搜索列表中的项目我正在使用 post query rest api。但它返回空数组
- scala - Amazon Deequ (scala) - 并行化分析器