gpt4 book ai didi

mongodb - mongodb ObjectId 的问题

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

我有连接到 mongodb 数据库的 Go 代码。问题是,当我试图从集合中获取记录时,有一个 ObjectId 类型的“_id”字段,但在 mgo 驱动程序中 ObjectId

type ObjectID [12]byte

但是当我试图获取记录时,Go 说:

reflect.Set: value of type []uint8 is not assignable to type ObjectID

我尝试创建自己的 []uint8 类型,但我不知道如何将 []uint8 ("ObjectId") 转换为 string 或通过这些 ID 查找一些记录。

// ObjectId type that mongodb wants to see
type ObjectID []uint8

// model
type Edge struct {
ID ObjectID `bson:"_id"`
Name string `bson:"name"`
StartVertex string `bson:"startVertex"`
EndVertex string `bson:"endVertex"`
}


// method for getting record by those id
session, err := mgo.Dial(config.DatabaseURL)
if err != nil {
fmt.Printf("Error is: %s", err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)

//edges collection
e := session.DB(config.DatabaseName).C(config.EdgesCollection)

var result models.Edge

err = e.Find(bson.M{"_id": fmt.Sprintln("ObjectId('", id, "')")}).One(&result)
if err != nil {
fmt.Println("Error is: ", err)
}

最佳答案

您必须使用“预定义”bson.ObjectId对 MongoDB 的 ObjectId 的值进行建模:

type Edge struct {
ID bson.ObjectId `bson:"_id"`
Name string `bson:"name"`
StartVertex string `bson:"startVertex"`
EndVertex string `bson:"endVertex"`
}

并且当你通过类型为 MongoDB 的 ObjectId 的 ID 查询对象时,使用类型为 bson.ObjectId 的值。你可以使用 Collection.FindId()方法:

var id bson.ObjectId = ...
err = e.FindId(id).One(&result)

在此处查看详细信息:Find by id with mgo ;和 MongoDB slice query into golang

关于mongodb - mongodb ObjectId 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57305069/

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