2016-02-12 15 views
7

Tôi cần nhận giá trị bằng cách sử dụng ObjectIdHex và cập nhật cũng như xem kết quả. Tôi đang sử dụng MongoDB và golang.But mã sau đây không hoạt động như mong đợiCách tìm bằng id ở golang và mongodb

package main 

import (
    "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) không làm việc cho tôi và cho tôi sau đầu ra

Inserting 
Queryingall 
Results All: [{ObjectIdHex("56bddee2cfa93bfe3d3504a1") Ale 555-5555} {ObjectIdHex("56bddee2cfa93bfe3d3504a2") Cla 555-1234-2222} {ObjectIdHex("56bddee2cfa93bfe3d3504a3") kasaun 533-12554-2222} {ObjectIdHex("56bddee2cfa93bfe3d3504a4") chamila 533-545-6784}] 
findbyID 
panic: not found 

goroutine 1 [running]: 
main.checkError(0x7f33d524b000, 0xc8200689b0) 

Làm thế nào tôi có thể khắc phục vấn đề này? tôi cần nhận được giá trị sử dụng oid và tôi cũng cập nhật làm thế nào tôi có thể làm điều đó

+4

bạn đang xóa các hồ sơ, tái chèn chúng sau đó sử dụng một id cứng mã hoá. Khi bạn chèn một bản ghi, nó nhận được một id ngẫu nhiên được gán cho nó. Nó sẽ khác nhau mỗi lần chạy. Id mã hóa của bạn không thể hoạt động –

Trả lời

9

Nó phải là _id không Id:

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

Tôi nhận được kết quả và lỗi tương tự .. –

+2

David Budworth là đúng. Không thả bộ sưu tập hoặc không mã hóa id. –

+0

Câu trả lời này là sai. Bạn có thể sử dụng ['Collection.FindId()'] (https://godoc.org/gopkg.in/mgo.v2#Collection.FindId) và sau đó bạn chỉ chuyển giá trị id, hoặc bạn sử dụng ['Collection.Find() '] (https://godoc.org/gopkg.in/mgo.v2#Collection.Find) và sau đó bạn phải chỉ định một giá trị với tên trường quá. Xem câu trả lời này: [Tìm theo id với mgo] (https://stackoverflow.com/questions/41244024/find-by-id-with-mgo/41244172#41244172). – icza

Các vấn đề liên quan