gpt4 book ai didi

mongodb - UUID 作为 _id 错误 - 不能将数组用于 _id

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:03 27 4
gpt4 key购买 nike

我正在尝试为 MongoDB 中的 _id 字段使用 UUID。

我有一个包装器结构来保存我的记录,如下所示:

type mongoWrapper struct {
ID uuid.UUID `bson:"_id" json:"_id"`
Payment storage.Payment `bson:"payment" json:"payment"`
}

这是我围绕 MongoDB 驱动程序包中的 InsertOne 函数编写的代码:

func (s *Storage) Create(newPayment storage.Payment) (uuid.UUID, error) {
mongoInsert := wrap(newPayment)
c := s.client.Database(thisDatabase).Collection(thisCollection)

insertResult, errInsert := c.InsertOne(context.TODO(), mongoInsert)
if errInsert != nil {
return uuid.Nil, errInsert
}

fmt.Println("Inserted a single document: ", insertResult.InsertedID)

return mongoInsert.ID, nil
}

这是我的 wrap() 函数,它包装了支付记录数据,并采用可选的 UUID 参数或相应地生成它自己的参数:

func wrap(p storage.Payment, i ...uuid.UUID) *mongoWrapper {
mw := &mongoWrapper{ID: uuid.Nil, Payment: p}

if len(i) > 0 {
mw.ID = i[0]
return mw
}

newID, errID := uuid.NewV4()
if errID != nil {
log.Fatal(errID)
}

mw.ID = newID

return mw
}

当我的一个测试调用 Create() 时,它返回以下错误:

storage_test.go:38: err: multiple write errors: [{write errors: [{can't use an array for _id}]}, {<nil>}]

我正在为我的 UUID 和 MongoDB 驱动程序使用以下包:

import(
uuid "github.com/satori/go.uuid"

"go.mongodb.org/mongo-driver/mongo"
)

我不清楚问题到底出在哪里。

我是否需要围绕 UUID 进行一些额外的管道处理才能正确处理它?<​​/p>

编辑:我做了更多更改,但 UUID 仍然作为数组出现:

type mongoWrapper struct {
UUID mongoUUID `bson:"uuid" json:"uuid"`
Payment storage.Payment `bson:"payment" json:"payment"`
}

type mongoUUID struct {
uuid.UUID
}

func (mu *mongoUUID) MarshalBSON() ([]byte, error) {
return []byte(mu.UUID.String()), nil
}

func (mu *mongoUUID) UnmarshalBSON(b []byte) error {
mu.UUID = uuid.FromStringOrNil(string(b))
return nil
}

最佳答案

uuid.UUID是引擎盖下的[16]byte

但是,此类型还实现了 encoding.TextMarshaler 接口(interface),我希望 mongo 能够遵守该接口(interface)(与 json 包一样)。

我相信解决方案是创建您自己的类型,嵌入 uuid.UUID 类型,并提供 bson.Marshaler interface 的自定义实现。 .

关于mongodb - UUID 作为 _id 错误 - 不能将数组用于 _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com