ArithmeticValueOperators¶
interface ArithmeticValueOperators : ValueOperators
Operators to arithmetically combine two or more values.
To learn more about aggregation operators, see AggregationOperators.
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¶
abs¶
open fun <Context : Any, Result : Number?> abs(value: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "absByField")
open fun <Context : Any, Result : Number?> abs(value: Field<Context, Result>): Value<Context, Result>
The absolute value of a number.
If the value is null or NaN, it is returned unchanged.
Example
class Sensor(
val name: String,
val startTemp: Int,
val endTemp: Int,
val diffTemp: Int,
)
collection.updateManyWithPipeline(filter = { Sensor::diffTemp.isNull() }) {
set {
Sensor::diffTemp set abs(Sensor::startTemp - Sensor::endTemp)
}
}
External resources
ceil¶
open fun <Context : Any, Result : Number?> ceil(value: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "ceilByField")
open fun <Context : Any, Result : Number?> ceil(value: Field<Context, Result>): Value<Context, Result>
The smallest integer greater than or equal to the specified value.
If the value is null or NaN, it is returned unchanged.
Example
class Sensor(
val value: Double,
val maxBound: Double,
)
collection.aggregate()
.set {
Sensor::maxBound set ceil(Sensor::value)
}.toList()
External resources
div¶
open infix fun <Context : Any, Result> Value<Context, Result>.div(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "divByField")
open infix fun <Context : Any, Result> Value<Context, Result>.div(other: Field<Context, Result>): Value<Context, Result>
infix inline fun <Context : Any, Result> Value<Context, Result>.div(other: Result): Value<Context, Result>
@JvmName(name = "divFieldReceiverByValue")
open infix fun <Context : Any, Result> Field<Context, Result>.div(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "divFieldReceiverByField")
open infix fun <Context : Any, Result> Field<Context, Result>.div(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "divFieldReceiverByResult")
infix inline fun <Context : Any, Result> Field<Context, Result>.div(other: Result): Value<Context, Result>
@JvmName(name = "divResultReceiverByValue")
infix inline fun <Context : Any, Result> Result.div(other: Value<Context, Result>): Value<Context, Result>
Divides one aggregation value by another.
Example
class ConferencePlanning(
val hours: Int,
val workdays: Double,
)
collection.updateManyWithPipeline {
set {
ConferencePlanning::workdays set (of(ConferencePlanning::hours) div of(8))
}
}
Note: because the / operator is already used in KtMongo for the field accessor (ValueOperators.div), it cannot be used for division. Explicitly spell out div instead. It needs explicit parentheses.
External resources
floor¶
open fun <Context : Any, Result : Number?> floor(value: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "floorByField")
open fun <Context : Any, Result : Number?> floor(value: Field<Context, Result>): Value<Context, Result>
The largest integer less than or equal to the specified value.
If the value is null or NaN, it is returned unchanged.
Example
class Sensor(
val value: Double,
val minBound: Double,
)
collection.aggregate()
.set {
Sensor::minBound set floor(Sensor::value)
}.toList()
External resources
get¶
Refers to a child field of a field of type BsonDocument.
Example
open operator fun <Context : Any, Result> Value<Context, Collection<Result>>.get(index: Value<Context, Int>): Value<Context, Result>
open operator fun <Context : Any, Result> Value<Context, Collection<Result>>.get(index: Field<Context, Int>): Value<Context, Result>
minus¶
open operator fun <Context : Any, Result> Value<Context, Result>.minus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "minusByField")
open operator fun <Context : Any, Result> Value<Context, Result>.minus(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "minusByProperty")
open operator fun <Context : Any, Result> Value<Context, Result>.minus(other: KProperty1<Context, Result>): Value<Context, Result>
inline operator fun <Context : Any, Result> Value<Context, Result>.minus(other: Result): Value<Context, Result>
@JvmName(name = "minusFieldReceiverByValue")
open operator fun <Context : Any, Result> Field<Context, Result>.minus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "minusFieldReceiverByField")
open operator fun <Context : Any, Result> Field<Context, Result>.minus(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "minusFieldReceiverByProperty")
open operator fun <Context : Any, Result> Field<Context, Result>.minus(other: KProperty1<Context, Result>): Value<Context, Result>
@JvmName(name = "minusFieldReceiverByResult")
inline operator fun <Context : Any, Result> Field<Context, Result>.minus(other: Result): Value<Context, Result>
@JvmName(name = "minusPropertyReceiverByValue")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.minus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "minusPropertyReceiverByField")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.minus(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "minusPropertyReceiverByProperty")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.minus(other: KProperty1<Context, Result>): Value<Context, Result>
@JvmName(name = "minusPropertyReceiverByResult")
inline operator fun <Context : Any, Result> KProperty1<Context, Result>.minus(other: Result): Value<Context, Result>
@JvmName(name = "minusResultReceiverByValue")
inline operator fun <Context : Any, Result> Result.minus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "minusResultReceiverByField")
inline operator fun <Context : Any, Result> Result.minus(other: Field<Context, Result>): Value<Context, Result>
Subtracts one aggregation value from another.
The second argument is subtracted from the first argument.
Example
class Sale(
val price: Int,
val fee: Int,
val discount: Int,
val total: Int,
)
collection.updateManyWithPipeline {
set {
Sale::total set (Sale::price + Sale::fee - Sale::discount)
}
}
External resources
of¶
Refers to a field within an aggregation value.
Example
Refers to a Kotlin value within an aggregation value.
Example
Refers to a BsonType within an aggregation value.
Example
plus¶
open operator fun <Context : Any, Result> Value<Context, Result>.plus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "plusByField")
open operator fun <Context : Any, Result> Value<Context, Result>.plus(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "plusByProperty")
open operator fun <Context : Any, Result> Value<Context, Result>.plus(other: KProperty1<Context, Result>): Value<Context, Result>
inline operator fun <Context : Any, Result> Value<Context, Result>.plus(other: Result): Value<Context, Result>
@JvmName(name = "plusFieldReceiverByValue")
open operator fun <Context : Any, Result> Field<Context, Result>.plus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "plusFieldReceiverByField")
open operator fun <Context : Any, Result> Field<Context, Result>.plus(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "plusFieldReceiverByProperty")
open operator fun <Context : Any, Result> Field<Context, Result>.plus(other: KProperty1<Context, Result>): Value<Context, Result>
@JvmName(name = "plusFieldReceiverByResult")
inline operator fun <Context : Any, Result> Field<Context, Result>.plus(other: Result): Value<Context, Result>
@JvmName(name = "plusPropertyReceiverByValue")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.plus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "plusPropertyReceiverByField")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.plus(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "plusPropertyReceiverByProperty")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.plus(other: KProperty1<Context, Result>): Value<Context, Result>
@JvmName(name = "plusPropertyReceiverByResult")
inline operator fun <Context : Any, Result> KProperty1<Context, Result>.plus(other: Result): Value<Context, Result>
@JvmName(name = "plusResultReceiverByValue")
inline operator fun <Context : Any, Result> Result.plus(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "plusResultReceiverByField")
inline operator fun <Context : Any, Result> Result.plus(other: Field<Context, Result>): Value<Context, Result>
times¶
open operator fun <Context : Any, Result> Value<Context, Result>.times(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "timesByField")
open operator fun <Context : Any, Result> Value<Context, Result>.times(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "timesByProperty")
open operator fun <Context : Any, Result> Value<Context, Result>.times(other: KProperty1<Context, Result>): Value<Context, Result>
inline operator fun <Context : Any, Result> Value<Context, Result>.times(other: Result): Value<Context, Result>
@JvmName(name = "timesFieldReceiverByValue")
open operator fun <Context : Any, Result> Field<Context, Result>.times(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "timesFieldReceiverByField")
open operator fun <Context : Any, Result> Field<Context, Result>.times(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "timesFieldReceiverByProperty")
open operator fun <Context : Any, Result> Field<Context, Result>.times(other: KProperty1<Context, Result>): Value<Context, Result>
@JvmName(name = "timesFieldReceiverByResult")
inline operator fun <Context : Any, Result> Field<Context, Result>.times(other: Result): Value<Context, Result>
@JvmName(name = "timesPropertyReceiverByValue")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.times(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "timesPropertyReceiverByField")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.times(other: Field<Context, Result>): Value<Context, Result>
@JvmName(name = "timesPropertyReceiverByProperty")
open operator fun <Context : Any, Result> KProperty1<Context, Result>.times(other: KProperty1<Context, Result>): Value<Context, Result>
@JvmName(name = "timesPropertyReceiverByResult")
inline operator fun <Context : Any, Result> KProperty1<Context, Result>.times(other: Result): Value<Context, Result>
@JvmName(name = "timesResultReceiverByValue")
inline operator fun <Context : Any, Result> Result.times(other: Value<Context, Result>): Value<Context, Result>
@JvmName(name = "timesResultReceiverByField")
inline operator fun <Context : Any, Result> Result.times(other: Field<Context, Result>): Value<Context, Result>
unsafe¶
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.
Refers to a field child of the current field, without checking that it is a field available on the current object.
Refers to a field child of the current field, without checking that it is a field available on the current object.
Refers to a field child of the current field, without checking that it is a field available on the current object.
Refers to a field child of the current field, with no compile-time safety.
unsafeCast¶
Overwrites the represented type of this value.
This method can be useful to bypass type checks.
Example
If a field has changed type over time, the DTO will use the newer type. However, you may still want to write a query using the old type: