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.

Properties

context

@LowLevelApi



abstract val context: BsonContext

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

@LowLevelApi



@DangerousMongoApi



fun <N : Node> CompoundNode<N>.acceptAll(nodes: Iterable<N>)

Adds any number of nodes into this one.

ascending

abstract fun ascending(field: Field<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

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

abstract fun descending(field: Field<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

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

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

@LowLevelApi



open fun toBson(): Bson

Writes the result of simplifying to a new BSON document.

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.