Skip to content

SortOptionDsl

DSL to describe a sort order.

This DSL declares the methods ascending and descending which describe in which order elements are sorted.

For example,

ascending(User::name)
descending(User::age)

will sort users in alphabetical order of their name, and when users have the same name, will sort them in decreasing order of their age.

See WithSort.sort.

Inheritors

Properties

context

The context used to generate this expression.

field

Converts a Kotlin property into a Field.

Functions

accept

@LowLevelApi
@DangerousMongoApi
abstract override fun accept(node: BsonNode)

Adds a new node as a child of this one.

acceptAll

Adds any number of nodes into this one.

ascending

abstract fun ascending(field: Field<Document, *>)

open fun ascending(field: KProperty1<Document, *>)

If two documents have a different value of field, the one with lesser value will be returned first.

If this function is called multiple times, the first call takes precedence: subsequent calls determine the order of documents when they are equal according to the first call.

Example

class User(
    val name: String,
    val age: Int,
)

users.find(
    options = {
        sort {
            ascending(User::age)
            ascending(User::name)
        }
    },
    filter = {}
)

This will return users from the youngest to the oldest. If multiple users have the same age, they are returned in the alphabetical order of their name.

See also

  • descending: To return documents in descending order.

descending

abstract fun descending(field: Field<Document, *>)

open fun descending(field: KProperty1<Document, *>)

If two documents have a different value of field, the one with greater value will be returned first.

If this function is called multiple times, the first call takes precedence: subsequent calls determine the order of documents when they are equal according to the first call.

Example

class User(
    val name: String,
    val age: Int,
)

users.find(
    options = {
        sort {
            descending(User::age)
            ascending(User::name)
        }
    },
    filter = {}
)

This will return users from the oldest to the youngest. If multiple users have the same age, they are returned in the alphabetical order of their name.

See also

  • ascending: To return documents in ascending order.

div

open operator fun <Root, Parent, Child> KProperty1<Root, Parent>.div(child: KProperty1<Parent & Any, Child>): Field<Root, Child>

Refers to child as a nested field of the current field.

open operator fun <Root, Type, Child> Field<Root, Type>.div(child: KProperty1<in Type & Any, Child>): Field<Root, Child>

Refers to child as a nested field of the current field.

open operator fun <Root, Type, Child> Field<Root, Type>.div(child: Field<Type, Child>): Field<Root, Child>

Refers to child as a nested field of the current field.

freeze

@LowLevelApi
abstract override fun freeze()

Makes this expression immutable.

get

open operator fun <Root, Type> KProperty1<Root, Collection<Type>>.get(index: Int): Field<Root, Type>

Refers to a specific item in an array, by its index.

open operator fun <Root, Type> KProperty1<Root, Map<String, Type>>.get(index: String): Field<Root, Type>

Refers to a specific item in a map, by its name.

open operator fun <Root, Type> Field<Root, Collection<Type>>.get(index: Int): Field<Root, Type>

Refers to a specific item in an array, by its index.

open operator fun <Root, Type> Field<Root, Map<String, Type>>.get(key: String): Field<Root, Type>

Refers to a specific item in a map, by its name.

simplify

@LowLevelApi
abstract fun simplify(): BsonNode?

Returns a simplified (but equivalent) expression to the current expression.

toBson

Writes the result of simplifying to a new BsonDocument.

toString

abstract override fun toString(): String

JSON representation of this expression.

unsafe

open infix fun <Root, Child> KProperty1<Root, *>.unsafe(child: String): Field<Root, Child>

Refers to a field child of the current field, with no compile-time safety.

open infix fun <Root, Child> KProperty1<Root, *>.unsafe(child: KProperty1<*, Child>): Field<Root, Child>

Refers to a field child of the current field, without checking that it is a field available on the current object.

open infix fun <Root, Child> KProperty1<Root, *>.unsafe(child: Field<*, Child>): Field<Root, Child>

Refers to a field child of the current field, without checking that it is a field available on the current object.

open infix fun <Root, Child> Field<Root, *>.unsafe(child: KProperty1<*, Child>): Field<Root, Child>

Refers to a field child of the current field, without checking that it is a field available on the current object.

open infix fun <Root, Child> Field<Root, *>.unsafe(child: Field<*, Child>): Field<Root, Child>

Refers to a field child of the current field, without checking that it is a field available on the current object.

open infix fun <Root, Type, Child> Field<Root, Type>.unsafe(child: String): Field<Root, Child>

Refers to a field child of the current field, with no compile-time safety.

writeTo

@LowLevelApi
abstract override fun writeTo(writer: BsonFieldWriter)

Writes the result of simplifying this expression into writer.