亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在golang和mongodb中通過id查找

如何在golang和mongodb中通過id查找

Go
忽然笑 2021-12-13 17:10:16
我需要使用 ObjectIdHex 獲取值并進行更新并查看結果。我正在使用 mongodb 和 golang。但是下面的代碼沒有按預期工作package mainimport (    "fmt"    "gopkg.in/mgo.v2"    "gopkg.in/mgo.v2/bson")type Person struct {    Id      bson.ObjectId `json:"id" bson:"_id,omitempty"`    Name  string    Phone string}func checkError(err error) {    if err != nil {        panic(err)    }}const (    DB_NAME       = "gotest"    DB_COLLECTION = "pepole_new1")func main() {    session, err := mgo.Dial("localhost")    checkError(err)    defer session.Close()    session.SetMode(mgo.Monotonic, true)    c := session.DB(DB_NAME).C(DB_COLLECTION)    err = c.DropCollection()    checkError(err)    ale := Person{Name:"Ale", Phone:"555-5555"}    cla := Person{Name:"Cla", Phone:"555-1234-2222"}    kasaun := Person{Name:"kasaun", Phone:"533-12554-2222"}    chamila := Person{Name:"chamila", Phone:"533-545-6784"}    fmt.Println("Inserting")    err = c.Insert(&ale, &cla, &kasaun, &chamila)    checkError(err)    fmt.Println("findbyID")    var resultsID []Person    //err = c.FindId(bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")).One(&resultsID)    err = c.FindId(bson.M{"Id": bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")}).One(&resultsID)    checkError(err)    if err != nil {        panic(err)    }    fmt.Println("Phone:", resultsID)    fmt.Println("Queryingall")    var results []Person    err = c.Find(nil).All(&results)    if err != nil {        panic(err)    }    fmt.Println("Results All: ", results)}FindId(bson.M{"Id": bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")}).One(&resultsID) 對我不起作用并給我以下輸出InsertingQueryingallResults All:  [{ObjectIdHex("56bddee2cfa93bfe3d3504a1") Ale 555-5555} {ObjectIdHex("56bddee2cfa93bfe3d3504a2") Cla 555-1234-2222} {ObjectIdHex("56bddee2cfa93bfe3d3504a3") kasaun 533-12554-2222} {ObjectIdHex("56bddee2cfa93bfe3d3504a4") chamila 533-545-6784}]findbyIDpanic: not foundgoroutine 1 [running]:main.checkError(0x7f33d524b000, 0xc8200689b0)我該如何解決這個問題?我需要使用 oid 獲取價值并進行更新,我該怎么做
查看完整描述

3 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

使用Golang官方驅動也可以,如下:


// convert id string to ObjectId

objectId, err := primitive.ObjectIDFromHex("5b9223c86486b341ea76910c")

if err != nil{

    log.Println("Invalid id")

}


// find

result:= client.Database(database).Collection("user").FindOne(context.Background(), bson.M{"_id": objectId})

user := model.User{}

result.Decode(user)


查看完整回答
反對 回復 2021-12-13
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

應該_id不是Id

c.FindId(bson.M{"_id": bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")})


查看完整回答
反對 回復 2021-12-13
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

我使用的一些示例代碼。


func (model *SomeModel) FindId(id string) error {

    db, ctx, client := Drivers.MongoCollection("collection")

    defer client.Disconnect(ctx)


    objID, err := primitive.ObjectIDFromHex(id)


    if err != nil {

        return err

    }


    filter := bson.M{"_id": bson.M{"$eq": objID}}



    if err := db.FindOne(ctx, filter).Decode(&model); err != nil {

        //fmt.Println(err)

        return err

    }


    fmt.Println(model)

    return nil

}



查看完整回答
反對 回復 2021-12-13
  • 3 回答
  • 0 關注
  • 629 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號