ConditionalValueOperators¶
interface ConditionalValueOperators : ValueOperators
Operators to conditionally create a value.
To learn more about aggregation operators, view AggregationOperators.
Inheritors¶
Types¶
Case¶
A single case in a switch operator.
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¶
cond¶
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByValueByValueByField")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByValueByValueByProperty")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
inline fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByValueByFieldByValue")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByValueByFieldByField")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByValueByFieldByProperty")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByValueByFieldByResult")
inline fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByValueByPropertyByValue")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByValueByPropertyByField")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByValueByPropertyByProperty")
open fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByValueByPropertyByResult")
inline fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: T
): Value<R, T>
inline fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: T,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByValueByResultByField")
inline fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: T,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByValueByResultByProperty")
inline fun <R : Any, T> cond(
condition: Value<R, Boolean>,
ifTrue: T,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByValueByValue")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByValueByField")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByValueByProperty")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByValueByResult")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByFieldByFieldByValue")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByFieldByField")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByFieldByProperty")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByFieldByResult")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByFieldByPropertyByValue")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByPropertyByField")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByPropertyByProperty")
open fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByPropertyByResult")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByFieldByResultByValue")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: T,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByResultByField")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: T,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByResultByProperty")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: T,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByFieldByResultByResult")
inline fun <R : Any, T> cond(
condition: Field<R, Boolean>,
ifTrue: T,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByPropertyByValueByValue")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByValueByField")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByValueByProperty")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByValueByResult")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Value<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByPropertyByFieldByValue")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByFieldByField")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByFieldByProperty")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByFieldByResult")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: Field<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByPropertyByPropertyByValue")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByPropertyByField")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByPropertyByProperty")
open fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByPropertyByResult")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: KProperty1<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByPropertyByResultByValue")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: T,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByResultByField")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: T,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByResultByProperty")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: T,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByPropertyByResultByResult")
inline fun <R : Any, T> cond(
condition: KProperty1<R, Boolean>,
ifTrue: T,
ifFalse: T
): Value<R, T>
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Value<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByResultByValueByField")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Value<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByResultByValueByProperty")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Value<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByResultByFieldByValue")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Field<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByResultByFieldByField")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Field<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByResultByFieldByProperty")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Field<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByResultByFieldByResult")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: Field<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByResultByPropertyByValue")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: KProperty1<R, T>,
ifFalse: Value<R, T>
): Value<R, T>
@JvmName(name = "condByResultByPropertyByField")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: KProperty1<R, T>,
ifFalse: Field<R, T>
): Value<R, T>
@JvmName(name = "condByResultByPropertyByProperty")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: KProperty1<R, T>,
ifFalse: KProperty1<R, T>
): Value<R, T>
@JvmName(name = "condByResultByPropertyByResult")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: KProperty1<R, T>,
ifFalse: T
): Value<R, T>
@JvmName(name = "condByResultByResultByField")
inline fun <R : Any, T> cond(
condition: Boolean,
ifTrue: T,
ifFalse: Field<R, T>
): Value<R, T>
Decides between two values depending on the evaluation of a boolean value.
Example
class User(
val name: String,
val score: Int,
val multiplier: Int,
)
users.updateManyWithPipeline {
set {
User::score set cond(
condition = of(User::multiplier) gt of(2),
ifTrue = of(User::score) * of(User::multiplier),
ifFalse = of(User::score)
)
}
}
External resources
See also
switch: Specify multiple conditions.
div¶
open operator fun <Context : Any, Root, Child> Value<Context, Root>.div(field: Field<Root, Child>): Value<Context, Child>
@JvmName(name = "divFieldReceiver")
open operator fun <Context : Any, Root, Child> Field<Context, Root>.div(field: Field<Root, Child>): Value<Context, Child>
@JvmName(name = "divResultReceiver")
inline operator fun <Context : Any, Root, Child> Root.div(field: Field<Root, Child>): Value<Context, Child>
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.
Examples
class User(
val name: String,
)
class Data(
val users: List<User>,
val userNames: List<Int>,
)
data.aggregate()
.set {
Data::userNames set Data::users.map { it / User::name }
}
External resources
get¶
Refers to a specific item in an array, by its index.
Refers to a specific item in a map, by its name.
Refers to a specific item in an array, by its index.
Refers to a specific item in a map, by its name.
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
switch¶
open fun <R : Any, T> switch(vararg cases: ConditionalValueOperators.Case<R, T>, default: Value<R, T>? = null): Value<R, T>
@JvmName(name = "switchByField")
open fun <R : Any, T> switch(vararg cases: ConditionalValueOperators.Case<R, T>, default: Field<R, T>): Value<R, T>
Selects one value based on multiple conditions.
Example
class User(
val name: String,
val score: Int,
val role: String,
val bonus: Int?,
)
users.updateManyWithPipeline {
set {
User::bonus set switch(
User::role eq "GUEST" then 5,
User::role eq "EMPLOYEE" then 6,
User::role eq "ADMIN" then 7,
default = -1,
)
}
}
External resources
See also
then¶
open infix fun <R : Any, T> Value<R, Boolean>.then(value: Value<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenByField")
open infix fun <R : Any, T> Value<R, Boolean>.then(value: Field<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenByProperty")
open infix fun <R : Any, T> Value<R, Boolean>.then(value: KProperty1<R, T>): ConditionalValueOperators.Case<R, T>
infix inline fun <R : Any, T> Value<R, Boolean>.then(value: T): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenFieldReceiverByValue")
open infix fun <R : Any, T> Field<R, Boolean>.then(value: Value<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenFieldReceiverByField")
open infix fun <R : Any, T> Field<R, Boolean>.then(value: Field<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenFieldReceiverByProperty")
open infix fun <R : Any, T> Field<R, Boolean>.then(value: KProperty1<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenFieldReceiverByResult")
infix inline fun <R : Any, T> Field<R, Boolean>.then(value: T): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenPropertyReceiverByValue")
open infix fun <R : Any, T> KProperty1<R, Boolean>.then(value: Value<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenPropertyReceiverByField")
open infix fun <R : Any, T> KProperty1<R, Boolean>.then(value: Field<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenPropertyReceiverByProperty")
open infix fun <R : Any, T> KProperty1<R, Boolean>.then(value: KProperty1<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenPropertyReceiverByResult")
infix inline fun <R : Any, T> KProperty1<R, Boolean>.then(value: T): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenResultReceiverByValue")
infix inline fun <R : Any, T> Boolean.then(value: Value<R, T>): ConditionalValueOperators.Case<R, T>
@JvmName(name = "thenResultReceiverByField")
infix inline fun <R : Any, T> Boolean.then(value: Field<R, T>): ConditionalValueOperators.Case<R, T>
Instantiates a Case for the switch operator.
Example
class User(
val name: String,
val score: Int,
val role: String,
val bonus: Int?,
)
users.updateManyWithPipeline {
set {
User::bonus set switch(
User::role eq "GUEST" then 5,
User::role eq "EMPLOYEE" then 6,
User::role eq "ADMIN" then 7,
default = -1,
)
}
}
See also
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.