mgo.FindId()가 16진수 개체 ID가 있는 문서를 검색하지 못하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-31 07:17:30
원래의
128명이 탐색했습니다.

Why Does mgo.FindId() Fail to Retrieve Documents with a Hexadecimal Object ID?

Golang의 MGO 라이브러리로 MongoDB ID 검색 문제 해결

Golang에서 MongoDB 작업을 위해 mgo 라이브러리를 사용할 때 개발자는 다음과 같은 문제에 직면할 수 있습니다. FindId 메서드를 사용하여 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>
로그인 후 복사

출력:

595f2c1a6edcba0619073263
{ObjectIdHex("") 0   0  0    0 {         0    false 0    } 0 0 0  0 0 0 0}
ObjectIDs must be exactly 12 bytes long (got 24)
not found
로그인 후 복사

MongoDB에 존재하는 문서에도 불구하고 코드는 문서를 검색하지 못합니다. 이 문제를 해결하려면 MongoDB의 개체 ID 특성을 이해하는 것이 중요합니다.

MongoDB의 개체 ID 이해

MongoDB의 개체 ID는 12바이트 값입니다. 다음 구성 요소로 구성됩니다.

  • 객체가 생성된 시간을 나타내는 타임스탬프 4바이트
  • 기계 식별자 3바이트
  • 프로세스 식별자 2바이트
  • 3바이트의 임의 바이트

16진수 문자열을 MongoDB 객체 ID로 변환

제공된 코드 조각에서 message.ID의 값은 다음과 같습니다. 개체 ID의 24자 16진수 문자열 표현입니다. 이 문자열을 MongoDB 개체 ID로 변환하려면 bson.ObjectIdHex() 함수를 사용해야 합니다.

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

결론

객체 ID의 특성을 이해함으로써 MongoDB에서 16진수 표현과 개체 ID 간을 변환하는 적절한 기능을 활용하면 개발자는 mgo 라이브러리를 사용하여 문서를 효과적으로 검색할 수 있습니다.

위 내용은 mgo.FindId()가 16진수 개체 ID가 있는 문서를 검색하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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