mgo를 사용하여 ID로 문서 찾기
질문:
아래 코드 예에서 , MongoDB 컬렉션에 존재하는 것으로 알려진 레코드는 FindId 메서드를 사용하여 찾을 수 없습니다. 대신 코드는 0 값을 반환합니다. 문제는 무엇입니까?
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() c := session.DB("id_bag").C("id_cookie") data := id_cookie{} err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) if (err2 != nil){ Info.Println("error") Info.Println(err2) } Info.Println(data) return data.IdCookie }
답변:
문제는 FindId의 메서드 서명에 있습니다. ID만 인수로 사용하는 반면 Find에는 필드 이름도 지정된 맵이 필요합니다. 이 문제를 해결하려면 다음 코드를 사용하세요.
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) // OR err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)
오류가 발생하지 않으면 문서를 성공적으로 찾은 것입니다. IdCookie 필드가 여전히 0인 경우 MongoDB에 다른 이름으로 저장될 수 있습니다. 구조체 태그를 사용하여 올바르게 매핑하세요.
type id_cookie struct { IdCookie int `bson:"myid"` }
또한 각 쿼리에 대해 새 연결을 생성하는 대신 MongoDB에 대한 단일 연결을 설정하고 이를 재사용하는 것이 좋습니다. 쿼리 성능 최적화에 대한 자세한 내용은 링크된 토론을 참조하세요.
위 내용은 `mgo.FindId`가 내 MongoDB 문서를 찾지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!