> 백엔드 개발 > Golang > mgo를 사용하여 ID별로 문서를 검색할 때 My Go 프로그램에서 \'ObjectIDs는 정확히 12바이트 길이여야 합니다\' 오류가 발생하는 이유는 무엇입니까?

mgo를 사용하여 ID별로 문서를 검색할 때 My Go 프로그램에서 \'ObjectIDs는 정확히 12바이트 길이여야 합니다\' 오류가 발생하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-10-29 17:59:02
원래의
329명이 탐색했습니다.

Why Does My Go Program Get

Go에서 mgo를 사용하여 문서 ID를 검색할 수 없습니다

문제:

mgo 라이브러리를 사용하는 Go 프로그램에서 MongoDB 데이터베이스와 상호 작용하면 ID로 문서를 검색하는 코드가 "ObjectID의 길이는 정확히 12바이트여야 합니다(24바이트)."라는 오류와 함께 실패합니다. 지정된 ID를 가진 문서가 데이터베이스에 있지만 쿼리가 결과를 반환하지 않습니다.

문제 코드:

<code class="go">session.SetMode(mgo.Monotonic, true)
coll := session.DB("aaaw_web").C("cron_emails")
var result Result
fmt.Printf("%v", message.ID)
err = coll.FindId(bson.ObjectId(message.ID)).One(&result)
fmt.Printf("%v", result)
fmt.Println(err)</code>
로그인 후 복사

원인:

제공된 ID가 유효한 ObjectId가 아니라는 오류 메시지가 나타납니다. 이 경우 문제는 문자열 ID를 bson.ObjectId로 변환하는 데 있습니다.

해결책:

ObjectId의 문자열 표현을 다음으로 올바르게 변환하려면 bson.ObjectId인 경우 bson.ObjectIdHex() 함수를 사용하세요.

<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
로그인 후 복사

이 함수는 ObjectId의 16진수 표현이 포함된 문자열을 허용하고 유효한 bson.ObjectId 값을 반환합니다.

설명:

bson.ObjectId는 24개의 16진수 문자열로 표현되는 12바이트 값입니다. 원본 코드에서 수행된 유형 변환은 24자 문자열을 bson.ObjectId에 대한 원시 데이터로 해석하여 잘못된 24바이트 ObjectId를 생성했습니다. bson.ObjectIdHex()를 사용하면 문자열이 올바르게 구문 분석되고 적절한 바이트 길이를 가진 유효한 ObjectId로 변환됩니다.

위 내용은 mgo를 사용하여 ID별로 문서를 검색할 때 My Go 프로그램에서 \'ObjectIDs는 정확히 12바이트 길이여야 합니다\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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