문서 메뉴

문서 홈애플리케이션 개발MongoDB 드라이버Go 드라이버

반환된 결과 건너뛰기

이 페이지의 내용

  • 개요
  • Skip
  • 집계
  • 추가 정보

이 가이드에서는 읽기 작업에서 반환된 지정된 수의 결과를 건너뛰는 방법을 배울 수 있습니다.

이 가이드의 예제에서는 다음 Course 구조체를 courses collection의 문서 모델로 사용합니다.

type Course struct {
Title string
Enrollment int32
}

이 가이드의 예시를 실행하려면 다음 스니펫을 사용하여 이러한 문서를 db.courses 컬렉션에 로드하세요.

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "World Fiction", Enrollment: 35},
Course{Title: "Abstract Algebra", Enrollment: 60},
Course{Title: "Modern Poetry", Enrollment: 12},
Course{Title: "Plate Tectonics", Enrollment: 45},
}
result, err := coll.InsertMany(context.TODO(), docs)

존재하지 않는 데이터베이스 및 collection

쓰기 작업을 수행할 때 필요한 데이터베이스 및 collection이 없는 경우 서버는 이를 암시적으로 생성합니다.

각 문서에는 titleenrollment 필드에 해당하는 과정 제목 및 최대 등록 수를 포함하는 대학 과정에 대한 설명이 포함되어 있습니다.

쿼리에서 반환된 지정된 수의 결과를 건너뛰려면 건너뛰려는 문서 수를 읽기 작업 옵션의 SetSkip() 메서드에 전달하세요.

다음 읽기 작업은 options 객체를 매개변수로 사용합니다.

  • Find()

  • FindOne()

  • CountDocuments()

  • gridfs.Bucket.Find()

문서가 쿼리와 일치하는 문서 수를 초과하는 경우 해당 쿼리는 문서를 반환하지 않습니다.

SetSkip() 메서드에 음수를 전달하면 런타임 오류가 발생합니다.

찾기 작업은 어떤 필드에서도 정렬되지 않은 저장 순서로 문서를 반환합니다. 임의의 문서를 건너뛰는 것을 방지하려면 건너뛰기 옵션을 설정하기 전에 SetSort() 메서드를 사용하여 고유 값이 있는 필드에서 문서를 정렬합니다.

다음 예제에서는 다음과 같은 동작으로 Find() 작업을 수행합니다.

  • enrollment 필드에서 결과를 오름차순으로 정렬합니다.

  • 처음 두 문서를 건너뜁니다.

opts := options.Find().SetSort(bson.D{{"enrollment", 1}}).SetSkip(2)
cursor, err := coll.Find(context.TODO(), bson.D{}, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

집계 파이프라인에 $skip 단계를 포함하여 문서를 건너뛸 수도 있습니다.

다음 예시에서는 다음과 같은 동작으로 Aggregate() 작업을 수행합니다.

  • enrollment 필드에서 결과를 내림차순으로 정렬합니다.

  • 첫 번째 문서 건너뛰기

sortStage := bson.D{{"$sort", bson.D{{"enrollment", -1}}}}
skipStage := bson.D{{"$skip", 1}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage, skipStage})
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

← 결과 정렬

이 페이지의 내용