Создание веб-приложения с использованием go и firestore. У меня странная проблема. Если я сохраню данные, используя метод NewDo c
ref := client.Collection("blogs").NewDoc()
_, err := ref.Set(ctx, mapBlog)
if err != nil {
// Handle any errors in an appropriate way, such as returning them.
log.Printf("An error has occurred: %s", err)
}
, у меня будет возможность извлечь всю коллекцию, используя
var bs models.Blogs
iter := client.Collection("blogs").Documents(ctx)
for {
var b models.Blog
doc, err := iter.Next()
if err != nil {
fmt.Println(err)
}
if err == iterator.Done {
break
}
if err := doc.DataTo(&b); err != nil {
fmt.Println(doc.Data())
bs = append(bs, b)
}
}
Теперь, это здорово, когда я просто хочу посмотреть все документы в коллекции блогов. Но затем я сталкиваюсь с проблемой невозможности запросить определенный c блог из коллекции блогов. Я решил эту проблему, посмотрев документацию и сохранив подобные сообщения.
//p is a struct and p.ID is just a string identifier
// the docs show creating a struct with an ID and then an embedded struct within.
_, err := client.Collection("blogs").Doc(p.ID).Set(ctx, p)
if err != nil {
fmt.Println(err)
}
Но так как я сам создаю docID, я извлекаю все документы из всей коллекции, используя
if err := doc.DataTo(&b); err != nil {
fmt.Println(doc.Data())
bs = append(bs, b)
fmt.Println(b)
}
больше не работает. По сути, мне нужно иметь возможность загружать все блоги для одной страницы, а затем, если щелкнуть конкретный блог, мне нужно иметь возможность получить идентификатор и go найти только один документ в коллекции. Почему do c .DataTo не будет работать, если я сам установлю Do c ID?
Есть ли лучший способ, как правило, просто извлечь все документы из коллекции, а затем специально извлечь один документ?