在使用docstore集合迭代器绑定mongodb文档以转到Struct时获取此错误。
数据库: Azure CosmosDB mongoDb API Go驱动程序: Docstore
代码详细信息:
Cosmos DB构造器代码
client, err := c.newClient(ctx, true)
if err != nil {
log.Error("error connecting to mongodb cluster", zap.Error(err))
return nil, err
}
database := client.Database(c.dbName)
collection := database.Collection(c.collName)
return mongodocstore.OpenCollection(collection, "", nil)用于与 Db文档映射的Go结构
type utterance struct {
ID primitive.ObjectID `docstore:"_id,omitempty"`
User string `docstore:"user,omitempty"`
Locale string `docstore:"Locale,omitempty"`
Text string `docstore:"Text,omitempty"`
Source string `docstore:"Source,omitempty"`
Timestamp time.Time `docstore:"Timestamp,omitempty"`
DocstoreRevision interface{}
}MondoDb文档
{
"_id" : ObjectId("60d5e18539864e948a8851a6"),
"User" : "auth0|6049b5ef5d79540071db6a0a",
"Locale" : "en_US",
"Text" : "Hi",
"Source" : "UTTERANCE_SOURCE_USER",
"Timestamp" : {
"$date" : 1624629637002
},
"DocstoreRevision" : "bf3b35d8-54ed-4a23-a08f-7d41b5c34085"
}调用docstore集合并迭代的方法
i := s.collection.Query().Get(ctx)
defer i.Stop()
var results []*services.Utterance
for {
fmt.Println("for every document: ")
//var native utterance
doc := &utterance{}
err := i.Next(ctx, doc) //error at this line
if err == io.EOF {
break
} else if err != nil {
fmt.Println(“getting to this err block“)
return nil, err
}
u := doc.ToProto()
results = append(results, u)
}发布于 2021-06-28 14:22:49
尝试将ID设置为指针类型:
type utterance struct {
ID *primitive.ObjectID `docstore:"_id,omitempty"`
User string `docstore:"user,omitempty"`
Locale string `docstore:"Locale,omitempty"`
Text string `docstore:"Text,omitempty"`
Source string `docstore:"Source,omitempty"`
Timestamp time.Time `docstore:"Timestamp,omitempty"`
DocstoreRevision interface{}
}可能在您创建要解码的结构时,primitive.ObjectID正在初始化,而驱动程序不知道如何解码它。
小心点。docstore是一个通用文档驱动程序。它并不是专门针对MongoDB的。因此,它可能不能很好地适用于MongoDB特定类型。
读取mongodb https://pkg.go.dev/gocloud.dev/docstore/mongodocstore的驱动程序
有一种方法可以设置_id字段中存储的内容。我知道docstore不知道如何从MongoDB中解码ObjectID。
https://stackoverflow.com/questions/68165002
复制相似问题