go - 如何使用结构获取和存储文档 ID
问题描述
我已经定义了一个这样的数据结构:
type Person struct {
Name string `firestore:"name,omitempty"`
}
当我查询集合中的所有文档时,我希望能够将 ID 附加到文档以供以后参考,但不一定将 ID 作为存储在 Firestore 中的属性(除非它是唯一的方法)。在 javascript 或 python 中,这很简单,因为数据结构是动态的,我可以查询 ID 帖子get()
并将其添加为动态键/值。myObj.id = doc.id
我将如何使用 Go 执行此操作?
package main
import (
"fmt"
"cloud.google.com/go/firestore"
"context"
"google.golang.org/api/iterator"
"log"
)
type Person struct {
Name string `firestore:"name,omitempty"`
}
func main() {
ctx := context.Background()
c, err := firestore.NewClient(ctx, "my-project")
if err != nil {
log.Fatalf("error: %v", err)
}
var people []Person
iter := c.Collection("people").Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("error: %v", err)
}
var p Person
err = doc.DataTo(p)
if err != nil {
log.Fatalf("error: %v", err)
}
// id := doc.Ref.ID
people = append(people, p)
}
fmt.Println(people)
}
输出,无ID
>> [{John Smith}]
解决方案
我相信 firestore 结构标签的工作方式与encoding/json
包中的标签相同。因此,值为“-”的标签意味着忽略该字段。所以
type Person struct {
ID int `firestore:"-"`
Name string `firestore:"name,omitempty"`
}
应该做的伎俩。
您可以自己设置 ID,但 firestore pkg 在读取/写入数据时会忽略它。
推荐阅读
- python - 尝试为对手的每次变化重置列
- html - 如何制作 div 和 svg 的视频背景?
- php - “试图获取非对象的属性 'id'” Laravel - Auth::id() 命令
- c# - EPPlus C# 将数据导出到 Excel。表格数据覆盖名称框而不是“插入”并保留其他单元格
- java - 端点无法解析为类型(ws 中的@Endpoint)- Eclipse 编译错误
- scala - 替换列并获取列值的 ltrim
- powershell - 做while循环 - powershell
- php - 拉拉维尔!如何将收藏价值与收藏价值进行比较文本?
- javascript - 渐进式获取或一次全部获取主详细信息
- r - R ggplot 2:如何根据另一个变量设置几何点 alpha?