Docs Menu
Docs Home
/ / /
Go Driver
/ / /

結果を並べ替える

項目一覧

  • Overview
  • サンプル データ
  • 並べ替えの方向
  • 上昇
  • 下降
  • 同点の扱い
  • 集計
  • 詳細情報
  • API ドキュメント

このガイドでは、操作の結果の順序を指定する方法を学習できます。

このガイドの例では、 coursesコレクション内のドキュメントのモデルとして、次の Course構造体を使用します。

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: 35},
}
result, err := coll.InsertMany(context.TODO(), docs)

Tip

存在しないデータベースとコレクション

書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。

各ドキュメントには、各ドキュメントの フィールドとtitle enrollmentフィールドに対応する、コース名と最大登録者数を含む大学コースの説明が含まれています。

結果の順序を指定するには、操作のオプションの SetSort() メソッドに並べ替えフィールドと方向を指定するインターフェースを渡します。

次の操作は、オプションをパラメーターとして受け取ります。

  • Find()

  • FindOne()

  • FindOneAndDelete()

  • FindOneAndUpdate()

  • FindOneAndReplace()

  • gridfs.Bucket.Find()

昇順 または 降順 の並べ替え方向を設定できます。

昇順で並べ替えると、結果が最小から最大の順に並べられます。この並べ替えを指定するには、並べ替えるフィールドと 1SetSort() メソッドに渡します。

Tip

昇順ソートでは、このメソッドは、Boolean 型の値を false から true に、String 型の値を a から z に、数値型の値を 負の無限大から正の無限大に 並べ替えます。

次の例では、enrollment フィールドで昇順の並べ替えを指定します。

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", 1}})
cursor, err := coll.Find(context.TODO(), filter, 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))
}

降順で並べ替えると、結果が最大から最小の順に並べられます。この並べ替えを指定するには、並べ替えるフィールドと -1SetSort() メソッドに渡します。

Tip

降順ソートでは、メソッドは、Boolean 型の値を true から false に、String 型の値を z から a に、数値型の値を 正の無限大から負の無限大 に並べ替えます。

次の例では、enrollment フィールドで降順の並べ替えを指定します。

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}})
cursor, err := coll.Find(context.TODO(), filter, 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))
}

結果を並べ替えるために使用しているフィールドで 2 つ以上のドキュメントが同じ値を持つ場合、同順位となります。MongoDB は、同点が発生した場合の順序を保証しません。

たとえば、サンプル データでは、次のドキュメントに enrollment の同点があります。

{"title":"World Fiction","enrollment":35}
{"title":"Plate Tectonics","enrollment":35}

最初のソートの同値を、フィールドを追加してソートすることで解決できます。特定のドキュメントの並べ順を保証する場合は、結果が同値にならないソート フィールドを選択します。

次の例では、enrollment フィールドで降順の並べ替えを指定し、次に title フィールドで昇順の並べ替えを指定します。

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}, {"title", 1}})
cursor, err := coll.Find(context.TODO(), filter, 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))
}

集計パイプラインで並べ替えを指定するために、$sort ステージを含めることもできます。

次の例では、enrollment フィールドで降順の並べ替えを指定し、次に title フィールドで昇順の並べ替えを指定します。

sortStage := bson.D{{"$sort", bson.D{{"enrollment", -1}, {"title", 1}}}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage})
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))
}

上記で説明されている操作の詳細については、次のガイドを参照してください。

  • クエリを指定する

  • Retrieve Data

  • 複合演算子

  • 集計

テキスト検索からのテキスト スコアの並べ替えの詳細については、テキストの検索を参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

Retrieve Distinct Values