首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将primitive.ObjectID类型设置为ObjectID

无法将primitive.ObjectID类型设置为ObjectID
EN

Stack Overflow用户
提问于 2021-06-28 14:18:50
回答 1查看 702关注 0票数 0

在使用docstore集合迭代器绑定mongodb文档以转到Struct时获取此错误。

数据库: Azure CosmosDB mongoDb API Go驱动程序: Docstore

代码详细信息:

Cosmos DB构造器代码

代码语言:javascript
复制
    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结构

代码语言:javascript
复制
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文档

代码语言:javascript
复制
{
    "_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集合并迭代的方法

代码语言:javascript
复制
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)
    }
EN

回答 1

Stack Overflow用户

发布于 2021-06-28 14:22:49

尝试将ID设置为指针类型:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68165002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档