mgo를 사용한 MongoDB의 효율적인 페이징: Cursor.min()을 사용한 솔루션
Mongo는 쿼리에서 Skip 및 Limit 메서드를 사용하여 페이지 매김 기능을 제공합니다. 운영. 그러나 이러한 방법은 페이지 수가 증가하면 비효율적일 수 있습니다. 페이징을 최적화하기 위해 MongoDB는 특정 인덱스 항목에서 쿼리를 시작할 수 있는cursor.min() 기능을 도입했습니다.
안타깝게도 mgo.v2 드라이버는cursor.min()을 직접 지원하지 않습니다. 이 기사에서는 Cursor.min()을 사용하여 효율적인 페이징을 달성하기 위해 Database.Run() 메서드와 find 명령을 사용하는 솔루션을 제시합니다.
수동 구현
찾기 만들기 명령:
cmd := bson.D{ {Name: "find", Value: "users"}, // Your query conditions {Name: "sort", Value: bson.D{ {Name: "name", Value: 1}, {Name: "_id", Value: 1} }}, {Name: "limit", Value: 10}, {Name: "batchSize", Value: 10}, {Name: "singleBatch": true} }
명령 실행:
var res struct { // Response fields } if err := db.Run(cmd, &res); err != nil { // Handle error }
역직렬화 결과:
var users []*User if err := db.C("users").NewIter(nil, res.Cursor.FirstBatch, 0, nil).All(&users); err != nil { // Handle error }
다음 커서 가져오기:
if len(users) > 0 { lastUser := users[len(users)-1] // Convert last user to cursor data }
변환 커서 데이터 문자열:
if cursorData != nil { cursor := base64.RawURLEncoding.EncodeToString(bson.Marshal(cursorData)) }
minquery 패키지 사용
minquery는 mgo와 함께cursor.min()을 사용하기 위한 단순화된 인터페이스를 제공합니다. .v2:
q := minquery.New(session.DB(""), "users", bson.M{"country": "USA"}). Sort("name", "_id").Limit(10) if cursor := getLastCursor(); cursor != "" { q = q.Cursor(cursor) } var users []*User newCursor, err := q.All(&users, "country", "name", "_id")
newCursor는 다음에 대한 커서 데이터를 저장합니다. 후속 페이징 요청.
참고: minquery.All()을 사용할 때 커서(인덱스 항목)에 사용된 필드 이름을 제공하여 적절한 커서 값을 생성할 수 있습니다.
위 내용은 `cursor.min()`을 사용하여 MongoDB의 mgo.v2 드라이버에서 효율적인 페이징을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!