> 백엔드 개발 > Golang > _id가 존재하는데도 mgo를 사용하는 Go 코드가 _id로 MongoDB 문서를 찾는 데 실패하는 이유는 무엇입니까?

_id가 존재하는데도 mgo를 사용하는 Go 코드가 _id로 MongoDB 문서를 찾는 데 실패하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-30 22:12:15
원래의
375명이 탐색했습니다.

Why is my Go code using mgo failing to find a MongoDB document by its _id, even though the _id exists?

mgo로 ID로 찾기

질문: _id로 데이터를 찾고 싶습니다. 나는 이 데이터가 존재하고 이 _id가 존재한다는 것을 알고 있습니다(pymongo로 테스트했습니다). 그러나 아래 코드에서는 찾지 못합니다.

type id_cookie struct {
    IdCookie int
}

func get_id_mongo() int {
    session, err := mgo.Dial("127.0.0.1")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    // Optional. Switch the session to a monotonic behavior.
    session.SetMode(mgo.Monotonic, true)

    c := session.DB("id_bag").C("id_cookie")
    data := id_cookie{}
    err2 := c.FindId(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)
    if (err2 != nil){
        Info.Println("error")
        Info.Println(err2)
    }
    Info.Println(data)
    return data.IdCookie
}
로그인 후 복사

답변: Collection.FindId() 또는 Collection.Find()를 사용하여 ID로 찾는 방법에는 두 가지가 있습니다.

Collection.FindId() 사용: ID만 전달 value.

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
로그인 후 복사

Collection.Find() 사용: 필드 이름으로 값을 지정합니다.

err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).
    One(&data)
로그인 후 복사

여전히 값이 0인 경우 id_cookie.IdCookie는 이 ID를 보유한 문서의 필드 이름이 다르다는 의미입니다. 구조체 태그를 사용하여 적절하게 매핑하세요.

type id_cookie struct {
    IdCookie int `bson:"myid"`
}
로그인 후 복사

성능 문제를 방지하려면 MongoDB 서버에 한 번 연결하고 세션을 재사용하세요. 자세한 내용은 다음 스레드를 참조하세요: [mgo - 쿼리 성능이 지속적으로 느린 것 같습니다(500-650ms)](https://groups.google.com/forum/#!topic/golang-nuts/8_EH7KO_S4Y).

위 내용은 _id가 존재하는데도 mgo를 사용하는 Go 코드가 _id로 MongoDB 문서를 찾는 데 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿