如何在 mongo 和 golang 中将 ObjectId 插入到文档中

问题描述 投票:0回答:1

我在将 ObjectId 插入文档时遇到问题。

这是收藏发售模型

type Sale struct {
    ID      primitive.ObjectID   `bson:"_id,omitempty"`
    Client  primitive.ObjectID   `bson:"client"`
    Items   []primitive.ObjectID `bson:"items"`
    Amounts []int                `bson:"amounts"`
    Cost    float64              `bson:"cost"`
    Payment bool                 `bson:"payment"`
    Date    time.Time            `bson:"date"`
}

在生成插入之前,我确保

Sale.Client
具有有效的 ObjectId 值,但是当我执行此插入时,该值在表中变为二进制。

例如:

ObjectId('67103588b9138d78d5ef09a2')
Binary.createFromBase64('ZxA1iLkTjXjV7wmi', 0)

这是插入代码

func CommonInsert(collection string, ctx context.Context, model interface{}) error {
    conn, err := config.GetDbConnection(ctx)
    if err != nil {
        return err
    }

    c := conn.Database("teste").Collection(collection)

    _, err = c.InsertOne(ctx, model)
    if err != nil {
        return err
    }

    return nil
}

我为插入生成了真实的模拟数据,但我仍然无法强制将数据转换为 ObjectId

mongodb go insert nosql
1个回答
0
投票

通常,当

primitive.ObjectID
不被识别为 MongoDB ObjectId 类型(而是作为
primitive.ObjectID
的基础类型的普通字节数组)时,它可以归结为:

  • 您使用自定义类型(将
    primitive.ObjectID
    作为其基础类型),例如
    type MyID primitive.ObjectID
  • 或者您混合主要驱动程序版本

目前有一个 beta v2 主要版本的驱动程序,当然还有 v1.1 版本。确保不要混合使用 2 个主要版本:要么使用 v1,要么使用 beta v2。

© www.soinside.com 2019 - 2024. All rights reserved.