首页 > 解决方案 > 来自 mongodb for _id 的两种可能的 golang 类型

问题描述

来这里新手。

我用 Go 开始了一个小项目,自学这门语言。它基于我们在 NodeJS 中开发的一个真实世界项目。

它的作用是,使用Mongo Change Events捕获源数据库中所做的更改并将其写入单独的“日志记录”数据库。这是出于审计目的。

因此,对于更改流事件,我有以下结构:

type documentKey struct {
    ID primitive.ObjectID `bson:"_id"`
}

type namespace struct {
    Db   string `bson:"db"`
    Coll string `bson:"coll"`
}

type changeEvent struct {
    ID            primitive.ObjectID  `bson:"_id"`
    OperationType string              `bson:"operationType"`
    ClusterTime   primitive.Timestamp `bson:"clusterTime"`
    FullDocument  bson.M              `bson:"fullDocument"`

    DocumentKey       documentKey `bson:"documentKey"`
    Ns                namespace   `bson:"ns"`
    UpdateDescription bson.M      `bson:"updateDescription"`
}

这里的问题是,在某些集合中,类型DocumentKey不是primitive.ObjectID,而是 a string(更准确地说,是 UUID)。此代码会在对这些集合进行更改时中断。我将如何在该结构中容纳一个字符串和一个 ObjectID?我想我可以使用interface{}? 但是我将如何去做,然后我如何将这些值返回到“日志记录”数据库中?

我想这也适用于一个更大的问题,如果您知道它可能不是始终如一的特定类型,您将如何保留 mongodb 的类型。

标签: mongodbgo

解决方案


推荐阅读