/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 / 2 0 2 1 ĠL it ote Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . lit ote . km ongo Ċ Ċ import Ġcom . mongodb . client . model . Sort s Ċ import Ġorg . bson . B son Document Ċ import Ġorg . bson . B son Int 3 2 Ċ import Ġorg . bson . conversions . B son Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġsort Ġspecification Ġfor Ġan Ġascending Ġsort Ġon Ġthe Ġgiven Ġproperties . Ċ Ġ* Ċ Ġ* Ġ@ param Ġproperties Ġthe Ġproperties , Ġwhich Ġmust Ġcontain Ġat Ġleast Ġone Ċ Ġ* Ġ@ return Ġthe Ġsort Ġspecification Ċ Ġ* Ġ@ mongodb . driver . manual Ġreference / operator / meta / orderby ĠSort Ċ Ġ*/ Ċ fun Ġascending ( var arg Ġproperties : ĠK Property < *> ): ĠB son Ġ= Ġascending ( properties . toList ()) Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġsort Ġspecification Ġfor Ġan Ġascending Ġsort Ġon Ġthe Ġgiven Ġproperties . Ċ Ġ* Ċ Ġ* Ġ@ param Ġproperties Ġthe Ġproperties , Ġwhich Ġmust Ġcontain Ġat Ġleast Ġone Ċ Ġ* Ġ@ return Ġthe Ġsort Ġspecification Ċ Ġ* Ġ@ mongodb . driver . manual Ġreference / operator / meta / orderby ĠSort Ċ Ġ*/ Ċ fun Ġascending ( properties : ĠList < K Property <* >> ): ĠB son Ġ= ĠSort s . ascending ( properties . map Ġ{ Ġit . path () Ġ}) Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġsort Ġspecification Ġfor Ġa Ġdescending Ġsort Ġon Ġthe Ġgiven Ġproperties . Ċ Ġ* Ċ Ġ* Ġ@ param Ġproperties Ġthe Ġproperties , Ġwhich Ġmust Ġcontain Ġat Ġleast Ġone Ċ Ġ* Ġ@ return Ġthe Ġsort Ġspecification Ċ Ġ* Ġ@ mongodb . driver . manual Ġreference / operator / meta / orderby ĠSort Ċ Ġ*/ Ċ fun Ġdescending ( var arg Ġproperties : ĠK Property < *> ): ĠB son Ġ= Ġdescending ( properties . toList ()) Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġsort Ġspecification Ġfor Ġa Ġdescending Ġsort Ġon Ġthe Ġgiven Ġproperties . Ċ Ġ* Ċ Ġ* Ġ@ param Ġproperties Ġthe Ġproperties , Ġwhich Ġmust Ġcontain Ġat Ġleast Ġone Ċ Ġ* Ġ@ return Ġthe Ġsort Ġspecification Ċ Ġ* Ġ@ mongodb . driver . manual Ġreference / operator / meta / orderby ĠSort Ċ Ġ*/ Ċ fun Ġdescending ( properties : ĠList < K Property <* >> ): ĠB son Ġ= ĠSort s . desc ending ( properties . map Ġ{ Ġit . path () Ġ}) Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġsort Ġspecification Ġfor Ġthe Ġtext Ġscore Ġmeta Ġget Projection Ġon Ġthe Ġgiven Ġproperty . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġsort Ġspecification Ċ Ġ* Ġ@ mongodb . driver . manual Ġreference / operator / get Projection / meta /# sort Ġtext Score Ċ Ġ*/ Ċ fun Ġ< T > ĠK Property < T >. sortBy Meta Text Score (): ĠB son Ġ= ĠSort s . meta Text Score ( path ()) Ċ Ċ /** Ċ Ġ* ĠCombine Ġmultiple Ġsort Ġspecifications . Ġ ĠIf Ġany Ġproperties Ġare Ġrepeated , Ġthe Ġlast Ġone Ġtakes Ġprecedence . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsorts Ġthe Ġsort Ġspecifications Ċ Ġ* Ġ@ param Ġascending Ġif Ġthe Ġsort Ġis Ġascending Ċ Ġ* Ġ@ return Ġthe Ġcombined Ġsort Ġspecification Ċ Ġ*/ Ċ fun ĠorderBy ( var arg Ġsorts : ĠK Property <* >, Ġascending : ĠBoolean Ġ= Ġtrue ): ĠB son Ġ= ĊĠĠĠ ĠorderBy ( sort s . toList (), Ġascending ) Ċ Ċ /** Ċ Ġ* ĠCombine Ġmultiple Ġsort Ġspecifications . Ġ ĠIf Ġany Ġproperties Ġare Ġrepeated , Ġthe Ġlast Ġone Ġtakes Ġprecedence . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsorts Ġthe Ġsort Ġspecifications Ċ Ġ* Ġ@ param Ġascending Ġif Ġthe Ġsort Ġis Ġascending Ċ Ġ* Ġ@ return Ġthe Ġcombined Ġsort Ġspecification Ċ Ġ*/ Ċ fun ĠorderBy ( sort s : ĠList < K Property <* >>, Ġascending : ĠBoolean Ġ= Ġtrue ): ĠB son Ġ= ĊĠĠĠ ĠorderBy ( sort s . map Ġ{ Ġit Ġto Ġascending Ġ}. toMap ()) Ċ Ċ /** Ċ Ġ* ĠCombine Ġmultiple Ġsort Ġspecifications . Ġ ĠIf Ġany Ġproperties Ġare Ġrepeated , Ġthe Ġlast Ġone Ġtakes Ġprecedence . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsorts Ġthe Ġsort Ġspecifications Ċ Ġ* Ġ@ return Ġthe Ġcombined Ġsort Ġspecification Ċ Ġ*/ Ċ fun ĠorderBy ( sort s : ĠMap < out ĠK Property < Any ? >, ĠBoolean >): ĠB son Ġ{ ĊĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠ Ġsorts . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġdocument . append ( it . key . path (), ĠB son Int 3 2 ( if Ġ( it . value ) Ġ 1 Ġelse Ġ- 1 )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdocument Ċ } ĊĊ