Skip to content

ArithmeticValueAccumulators

Accumulators to perform arithmetic operations.

To learn more about accumulation operators, see AccumulationOperators.

Inheritors

Properties

context

@LowLevelApi



abstract override val context: BsonContext

The strategy used when converting from KProperty1 to Field.

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.

average

open infix fun <T : Number> Field<Into, T>.average(value: Value<From, Number?>)

Calculates and returns the collective average of numeric values. Non-numeric values are ignored.

If all elements are non-numeric, null is returned.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val totalBalance: Int,
)

users.aggregate()
    .group {
        Result::totalBalance average of(User::balance)
    }
External resources
open infix fun <T : Number> KProperty1<Into, T>.average(value: Value<From, Number?>)

Calculates and returns the collective average of numeric values. Non-numeric values are ignored.

If all elements are non-numeric, null is returned.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val totalBalance: Int,
)

users.aggregate()
    .group {
        Result::totalBalance average of(User::balance)
    }
External resources

div

open operator fun <Context : Any, Root, Child> Value<Context, Root>.div(field: KProperty1<Root, Child>): Value<Context, Child>

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

open operator fun <Context : Any, Root, Child> Value<Context, Root>.div(field: Field<Root, Child>): Value<Context, Child>

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

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.

median

open infix fun <T : Number> Field<Into, T>.median(value: Value<From, Number?>)

Returns an approximation of the median, the 50th percentile, as a scalar value.

The median is computed with the t-digest algorithm, which computes an approximation. The result may vary, even on the same dataset.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val medianBalance: Double,
)

users.aggregate()
    .group {
        Result::medianBalance median of(User::balance)
    }
External resources
open infix fun <T : Number> KProperty1<Into, T>.median(value: Value<From, Number?>)

Returns an approximation of the median, the 50th percentile, as a scalar value.

The median is computed with the t-digest algorithm, which computes an approximation. The result may vary, even on the same dataset.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val medianBalance: Double,
)

users.aggregate()
    .group {
        Result::medianBalance median of(User::balance)
    }
External resources

of

open fun <Result> of(value: Result): Value<Any, Result>

Refers to a Kotlin value within an aggregation value.

Refers to a field within an aggregation value.

open fun of(value: BsonType): Value<Any, BsonType>

Refers to a BsonType within an aggregation value.

open fun <Context : Any, Result> of(field: Field<Context, Result>): Value<Context, Result>

Refers to a field within an aggregation value.

percentiles

open fun <T : Number> Field<Into, List<T>>.percentiles(value: Value<From, Number?>, vararg percentiles: Double)

Returns an approximation of the specified percentiles.

Each percentile is computed with the t-digest algorithm, which computes an approximation. The results may vary, even on the same dataset.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val percentiles: List<Double>,
)

users.aggregate()
    .group {
        Result::percentiles.percentiles(of(User::balance), 0.5, 0.75, 0.9, 0.95)
    }
External resources
open fun <T : Number> KProperty1<Into, List<T>>.percentiles(value: Value<From, Number?>, vararg percentiles: Double)

Returns an approximation of the specified percentiles.

Each percentile is computed with the t-digest algorithm, which computes an approximation. The results may vary, even on the same dataset.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val percentiles: List<Double>,
)

users.aggregate()
    .group {
        Result::percentiles.percentiles(of(User::balance), 0.5, 0.75, 0.9, 0.95)
    }
External resources

simplify

@LowLevelApi



abstract fun simplify(): BsonNode?

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

sum

open infix fun <T : Number> Field<Into, T>.sum(value: Value<From, Number?>)

Calculates and returns the collective sum of numeric values. Non-numeric values are ignored.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val totalBalance: Int,
)

users.aggregate()
    .group {
        Result::totalBalance sum of(User::balance)
    }
External resources
open infix fun <T : Number> KProperty1<Into, T>.sum(value: Value<From, Number?>)

Calculates and returns the collective sum of numeric values. Non-numeric values are ignored.

Example
class User(
    val name: String,
    val balance: Int,
)

class Result(
    val totalBalance: Int,
)

users.aggregate()
    .group {
        Result::totalBalance sum of(User::balance)
    }
External resources

toBson

@LowLevelApi



open fun toBson(): Bson

Writes the result of simplifying to a new BSON document.

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.