結果を並べ替える
Overview
このガイドでは、読み取り操作 の結果の順序を指定する方法を学習できます。
サンプル データ
このガイドの例を実行するには、次のスニペットを使用して、これらのドキュメントを tea.ratings
コレクションにロードします。
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Assam"}, {"rating", 5}}, bson.D{{"type", "Oolong"}, {"rating", 7}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "English Breakfast"}, {"rating", 5}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
Tip
存在しないデータベースとコレクション
書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。
各ドキュメントには、 フィールドとtype
rating
フィールドに対応するお茶の種類の評価が含まれています。
注意
各例ではObjectID
値が切り捨てられます。この値はドライバーが個別に生成するためです。
並べ替えの方向
結果の順序を指定するには、読み取り操作のオプションのSetSort()
メソッドに並べ替えフィールドと方向を指定するインターフェースを渡します。
次の読み取り操作メソッドの最後のパラメーターとしてオプションを指定します。
Find()
FindOne()
FindOneAndDelete()
FindOneAndUpdate()
FindOneAndReplace()
gridfs.Bucket.Find()
並べ替え方向は昇順または降順です。
上昇
昇順で並べ替えると、結果が最小から最大の順に並べられます。この並べ替えを指定するには、並べ替えるフィールドと 1
を SetSort()
メソッドに渡します。
Tip
昇順ソートでは、このメソッドは、Boolean
型の値を false
から true
に、String
型の値を a から z に、数値型の値を 負の無限大から正の無限大に 並べ替えます。
例
次の例では、rating
フィールドで昇順の並べ替えを指定します。
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", 1}}) cursor, err := coll.Find(context.TODO(), filter, opts) var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
下降
降順で並べ替えると、結果が最大から最小の順に並べられます。この並べ替えを指定するには、並べ替えるフィールドと -1
を SetSort()
メソッドに渡します。
Tip
降順ソートでは、メソッドは、Boolean
型の値を true
から false
に、String
型の値を z から a に、数値型の値を 正の無限大から負の無限大 に並べ替えます。
例
次の例では、rating
フィールドで降順の並べ替えを指定します。
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", -1}}) cursor, err := coll.Find(context.TODO(), filter, opts) var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
同点の扱い
結果を並べ替えるために使用しているフィールドで 2 つ以上のドキュメントが同じ値を持つ場合、同順位となります。MongoDB は、同点が発生した場合の順序を保証しません。
たとえば、サンプル データでは、次のドキュメントにrating
の同点があります。
[{_id ObjectID("...")} {type Assam} {rating 5}] [{_id ObjectID("...")} {type English Breakfast} {rating 5}]
同点が発生したときに特定のドキュメントの並べ順を保証するには、並べ替えるフィールドを追加で指定します。
例
次の例では、 rating
フィールドで昇順の並べ替えを指定し、次にtype
フィールドで降順の並べ替えを指定します。
filter := bson.D{} opts := options.Find().SetSort(bson.D{{"rating", 1}, {"type", -1}}) cursor, err := coll.Find(context.TODO(), filter, opts) var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
集計
集計パイプラインで並べ替えを指定するために、$sort ステージを含めることもできます。
例
次の例では、rating
フィールドで降順の並べ替えを指定し、次に type
フィールドで昇順の並べ替えを指定します。
sortStage := bson.D{{"$sort", bson.D{{"rating", -1}, {"type", 1}}}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage}) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
詳細情報
上記で説明されている操作の詳細については、次のガイドを参照してください。
テキスト検索からのテキスト スコアの並べ替えの詳細については、テキストの検索を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。