Tags

Tags give the ability to mark specific points in history as being important
  • 0.25.1

    protected Release: 0.25.1 • Fixed documentation issue
    Technical fixes
    
    Fixed a technical issue in the documentation website.
    
  • 0.25.0

    protected Release: 0.25.0 • BsonContext/BsonFactory split, serialization annotation support, experimental BsonPath and eager multiplatform BSON
    BsonContext/BsonFactory split, serialization annotation support, experimental BsonPath and eager multiplatform BSON
    
    ### BsonContext and BsonFactory
    
    > **Breaking change**
    >
    > Impacted modules: `:bson`, `:dsl`
    >
    > See: #95, !157
    
    Since the start of the project, the configuration of BSON documents is stored by the `BsonContext` interface. However, it was starting to become too big.
    Initially, `BsonContext` was used for BSON object creation. In 0.19.0, it obtained the capability of creating `ObjectId` instances. In this version, it would also have obtained the configuration for serializing paths.
    
    In this release, it is changed as follows:
    
    - The `BsonContext` is removed from `:bson`.
    - The new `BsonFactory` interface becomes responsible from creating BSON documents.
    - The capability of creating new `ObjectId` instances remains in `ObjectIdGenerator`.
    - A new `BsonContext` interface is created in `:dsl`, which aggregates the capabilities required by the DSL.
    
    If you created custom operators, you will need to switch the imports from the old `BsonContext` to the new one.
    
    Otherwise, end-users should not be impacted.
    
    ### PropertyNameStrategy
    
    > Impacted modules: `:dsl`, `:driver-sync-kmongo`, `:driver-coroutines-kmongo`
    >
    > See: #89, !151, !157
    
    The new interface `PropertyNameStrategy` was added to configure how the `Foo::user / User::name` syntax is converted into MongoDB paths.
    Users can override the default implementation when initializing the KtMongo library.
    For example, this can be used to look up annotations on the fields to change their name.
    
    When using one of the KMongo compatibility modules, the strategy used understands `@BsonId` and KotlinX.Serialization's `@SerialName`, as recommended by the KMongo documentation for the KotlinX.Serialization library.
    
    If you use Jackson or want to use KotlinX.Serialization annotations with the regular driver modules (without using the KMongo compatibility modules) you can override the `PropertyNameStrategy` used by the driver.
    
    We do not plan to add support for serialization annotations in the default implementation.
    
    As a consequence, some methods have been moved from `Field` to `FieldDsl`.
    
    ### BsonPath
    
    > Experimental
    >
    > Impacted modules: `:bson`
    >
    > See: #2, #93, #146
    
    Added the experimental `BsonPath` interface to represent JSONPath-like accessors to BSON documents.
    
    `BsonPath` is a great alternative to deserialization when we are only interested in a few fields, as it avoids the need for creating complex DTOs, especially when they are deeply nested.
    
    ```kotlin
    val path = BsonPath.parse("$.users.1.name")
    
    val name: String = myDocument at path
    ```
    
    ### BSON
    
    - Removed `@ExperimentalStdlibApi` on the `ObjectId` constructor as it has been stabilized in the standard library (b9ccf073)
    - `ObjectId.Serializer` has been changed from a class to an object (88f6947e)
    - `Timestamp.Serializer` has been changed from a class to an object (88f6947e)
    
    ### BSON (multiplatform)
    
    - Instances of `.reader()` are now reused. This will make access to fields faster (60397c9d)
    - Added `Bson.eager()` and `BsonArray.eager()` to eagerly initialize the readers, which makes them thread-safe. Improved the documentation on thread-safety (!167)
    - Improved the documentation of `Bson` and `BsonArray` (!167)
    
    ### Dependencies
    
    - Kotlin 2.2.21
    
  • 0.24.0

    protected Release: 0.24.0 • Mokodee, unset shorthand and easier KMongo migration
    Mokodee, unset shorthand and easier KMongo migration
    
    ### DSL
    
    - Added the `unset` shorthand for updates (1b49046f, !135)
    
    ### Documentation
    
    - Added Mokodee, the KtMongo mascot! (c488893f, thanks to [Lilywhiteout](https://bsky.app/profile/lilywhiteout.bsky.social))
    - Added a set up guide to the KMongo migration guide (e663d70f)
    - Reorganized and updated the Multiplatform roadmap (67f6816d, 716ce781)
    - Formatting improvements in the aggregation page (20d455fa, 35c79cf4)
    
    ### Dependencies
    
    - Prepared 2.1.1
    
  • 0.23.0

    protected Release: 0.23.0 • Multiplatform KotlinX.Serialization, Field.unsafe expansion, replace and KMongo utilities
    Multiplatform KotlinX.Serialization, Field.unsafe expansion, replace and KMongo utilities
    
    ### BSON (Multiplatform)
    
    - Multiplatform KotlinX.Serialization support (#50, !117, thanks @UnknownJoe796)
    
    ### DSL
    
    - Added `Field.unsafe()` overloads to allow more use-cases (!132)
    - `$concat` now allows nullability, and has been moved from `ArithmeticValueOperators` to `StringValueOperators` (!134)
    
    ### Drivers
    
    - Added `replaceOne()` and `repsertOne()` (!133)
    - Added `:driver-sync-kmongo` and `:driver-coroutines-kmongo` with a utility function to convert KMongo objects to KtMongo objects (!132)
    
    ### Documentation
    
    - Introduced the [Kotlin Multiplatform roadmap](https://ktmongo.opensavvy.dev/tutorials/multiplatform/index.html) (0861208a)
    - Added a [feature page on aggregations](https://ktmongo.opensavvy.dev/features/aggregations.html) (f4bec354)
    - Minor improvements on the home page
    
  • 0.22.0

    protected Release: 0.22.0 • WASI, averages and aggregation deserialization fixes
    WASI, averages and aggregation deserialization fixes
    
    ### BSON
    
    - Added Wasm WASI support (!126)
    
    ### DSL
    
    - Added the `$avg` accumulator (679ebb2c, !127)
    - Added the `$avg` aggregator (ebdc71de, !127)
    
    ### Drivers
    
    - Fixed `AggregationPipeline.reinterpret` which attempted to deserialize the wrong type (#91, !129)
    
  • 0.21.0

    protected Release: 0.21.0 • $group and string aggregation operators
    $group and string aggregation operators
    
    ### DSL
    
    - Projections are now represented with booleans instead of integers, for smaller request payloads (#81, !121)
    
    Aggregation stages:
    
    - Added `$group` (!120)
    
    Accumulation operators:
    
    - Added `$sum` (!120)
    
    Aggregation operators:
    
    - Added `$multiply`, `$divide` and `$subtract` (!122)
    - Added `$trim`, `$ltrim` and `$rtrim` (!123)
    - Added `$toLower` and `$toUpper` (!123)
    - Added `$substrCP`, `$substrBytes`, `$strLenCP` and `$strLenBytes` (!123)
    - Added `$split` (!123)
    - Added `$replaceOne` and `$replaceAll` (!123)
    
    ### Dependencies
    
    - KotlinX.Serialization 1.9.0
    - KotlinX.Coroutines 1.10.2
    - KotlinX.IO 0.8.0
    - MongoDB Java driver 5.5.1
    
  • 0.20.1

    protected Release: 0.20.1 • Fixed documentation website deployment
    Fixed documentation website deployment
    
  • 0.20.0

    protected Release: 0.20.0 • $addToSet, $currentDate and the new documentation website
    $addToSet, $currentDate and the new documentation website
    
    ### BSON
    
    - Added support for reading and writing `ObjectId` (!110)
    
    ### DSL
    
    - Added support for the update operator `$addToSet` (!107)
    - Added support for the update operator `$currentDate` (!108)
    
    ### Documentation
    
    - Moved the website to https://ktmongo.opensavvy.dev (!112, !113)
    
  • 0.19.0

    protected Release: 0.19.0 • Pure Kotlin ObjectId and Timestamp, $switch, type aggregation operators, bitwise filter operators, writeConcern and readPreference
    Pure Kotlin ObjectId and Timestamp, $switch, type aggregation operators, bitwise filter operators, writeConcern and readPreference
    
    ### BSON
    
    - Moved `ObjectId` to `opensavvy.ktmongo.bson.types` (6e455683, !80)
    - Added `ObjectIdGenerator` with multiple implementations (!80)
    - Added `ObjectId.MIN` and `ObjectId.MAX` (!80)
    - Added `BsonContext.newId` (!80)
    - Added `BsonReader.readInstant` and `BsonWriter.writeInstant` (244237ed, !88)
    - Added `opensavvy.ktmongo.bson.types.Timestamp` (!89)
    - Changed timestamp APIs from `Long` to the new `Timestamp` type (!89)
    
    ### BSON (official)
    
    - Deleted the old expect class opensavvy.ktmongo.bson.official.types.ObjectId (!80)
    - Added a codec for the new ObjectId (!80)
    
    ### BSON (multiplatform)
    
    - Decreased data copying when reading data (417128b5, !84)
    - Removed autoboxing in the implementation of the reader (17cab93a, !84)
    - Added no-copy piping of BSON from a reader to a writer (!86)
    - Added support for reading and writing `BsonType.DateTime` as `kotlin.time.Instant` (e15001f4, !88)
    - Added support for reading and writing `BsonType.RegExp` (2bb5e544, !88)
    - Added support for reading and writing `BsonType.Timestamp` (aa3c9a9e, !89)
    
    ### Official driver
    
    - `JvmMongoCollection.find` now returns a `JvmMongoIterable` instead of a `MongoIterable` (!85)
    
    ### DSL
    
    - Added the aggregation operator `$switch` (!90)
    - Added the aggregation operators `$type`, `$isArray`, `$isNumber`, `$toBoolean`, `$toDate`, `$toDouble`, `$toInt`, `$toLong`, `$toObjectId`, `$toString` and `$toUUID` (!91)
    - Added the filter operators `$bitAllClear`, `$bitsAllSet`, `$bitsAnyClear` and `$bitsAnySet` (!92)
    - Added the option `writeConcern` (!93)
    - Added the option `readPreference` (!94)
    - Created the `Command` interface and reorganized all commands to emit their BSON representation (!95)
    
    ### Documentation
    
    - Added a section on aggregation support to the KMongo migration page (#87, !103)
    
    ### Dependencies
    
    - Kotlin 2.2.0
    
  • 0.18.0

    protected Release: 0.18.0 • ObjectId, range operators, $min and $max, read concern and Java usage
    ObjectId, range operators, $min and $max, read concern and Java usage
    
    ### BSON
    
    - Pure Kotlin ObjectId implementation (!72)
    - Added utilities for comparing ObjectId and Instant (!72)
    
    ### DSL
    
    - Added the `isIn` operator to query on ranges (!75)
    - Added the `$size` filter operator (659dae51, !82)
    - Added the `$nor` filter operator (20378994, !82)
    - Added the `$min` and `$max` update operators (b298039f, !82)
    - Added the `readConcern` option (0b9520aa, !83)
    
    ### Synchronous driver
    
    - Added a new experimental module, `:driver-sync-java`, with utilities for using KtMongo from Java (!69)
    - Java: Added `JavaField.of(Customer::name)` syntax (!69)
    - Java: Added `KtMongo.from()` helper (!69)
    - Java: Added `options(s -> s.)` syntax (!69)
    
    ### Dependencies
    
    - Kotlin 2.1.21 (06afc477)
    - MongoDB Java driver 5.5.0 (07106e25)
    - KotlinX.Serialization 1.8.1 (399750c2)
    
  • 0.17.0

    protected Release: 0.17.0 • $mul and Field.unsafe
    $mul and Field.unsafe
    
    ### DSL
    
    - Marked `Field`'s `Root` type parameter as contravariant (2424b984)
    - Added `Field.unsafe` to access field names using a stringly API (508d0ca9, !71)
    - Added the `$mul` update operator (!74)
    
  • 0.16.0

    protected Release: 0.16.0 • skip, maxTimeMS, MinKey, MaxKey
    skip, maxTimeMS, MinKey, MaxKey
    
    ### DSL
    
    - Added the `skip` option (!65)
    - Added the `maxTimeMS` option (!65)
    
    ### BSON
    
    - Read and write the MinKey and MaxKey special values (#64, !67)
    
  • 0.15.0

    protected Release: 0.15.0 • `$regex` flexibility, simpler options, `Reader.toBson`
    `$regex` flexibility, simpler options, `Reader.toBson`
    
    ### DSL
    
    - Allow using `$regex` on a nullable `String` field (!59)
    - Rewrote the representation of options to make them simpler to evolve in the future (!61)
    
    ### BSON
    
    - Added `BsonDocumentReader.toBson` and `BsonArrayReader.toBson` (9148b99c, !61)
    - Added `BsonDocumentReader.asValue` and `BsonArrayReader.asValue` (19348ff2, !63)
    - Added `BsonValueWriter.pipe` (#41, 48267c74, !63)
    - Renamed `Bson.read` to `Bson.reader` (f503f49e, !61)
    
    ### BSON (Multiplatform)
    
    - Read binary data (876b6fee, !58)
    - Read JavaScript (21b5e928, !58)
    - Read `undefined` (c233d391, !62)
    - Implemented `BsonContext.buildArray` (#48, 37f0b868, !63)
    - Implemented `BsonFieldWriter.write` (627ec56e, !63)
    
    ### Documentation
    
    - Added a mention to `$in` and `$nin` in `FilterQuery` (a1e04fe8, !57)
    - Fixed a broken sentence in `BsonDocumentReader` (34ca574d, !57)
    - Added the Multiplatform BSON implementation to the API references (888b31ce, !57)
    
  • 0.14.0

    protected Release: 0.14.0 • Start of the Multiplatform driver, the great rename, $nin and $regex
    Start of the Multiplatform driver, the great rename, $nin and $regex
    
    ### Breaking changes
    
    This version contains a major rename that affects almost everything in the DSL module.
    To learn more about the reasons we did it, see #35 and !54.
    Although future versions may still have breakages, this was the last planned major change.
    
    - Renamed package `models` to `command`
    - Renamed package `expr` to `query`
    - Moved contents of package `expr.common` to `tree`
    - Moved contents of package `options` to `command`
    - Moved contents of package `options.common` to `command`
    - Renamed `FilterOperators` to `FilterQuery`, removed `FilterExpression`
    - Renamed `PredicateOperators` to `FilterQueryPredicate`, removed `PredicateExpression`
    - Renamed `UpdateOperators` to `UpdateQuery`, removed `UpdateExpression`
    - Renamed `UpsertOperators` to `UpsertQuery`
    - Renamed `Expression` (and its hierarchy) to `BsonNode`
    - Renamed `ValueDsl` to `AggregationOperators`
    
    ### BSON
    
    - Added `Bson.toByteArray()` and `BsonArray.toByteArray()` to access the raw binary BSON representation (!49)
    - `writeBinaryData`'s subtype parameter was changed from `Byte` to `UByte` to better mirror the BSON spec (!49)
    - Added `BsonType.fromCode()` to more easily access a BSON type from its binary representation (!50)
    - Added `Bson.read()` and `BsonArray.read()` to access contents of BSON objects (!50)
    - Added `BsonContext.readDocument()` and `BsonContext.readArray()` to convert from the binary BSON representation to driver objects (!50)
    - Documented that BSON-writeable objects much implement `toString` with a JSON representation (!54)
    
    ### BSON (Official)
    
    - Removed the dependency on NPM `bson` since it is currently unused (!49)
    
    ### BSON (Multiplatform)
    
    This new module is a pure Kotlin implementation of the BSON spec (#48, #49).
    
    - Write booleans (!49) and read them (!50)
    - Write int32 and int64 (!49) and read them (!50)
    - Write strings (!49) and read them (!50)
    - Write documents (!49) and read them (!50)
    - Write doubles (!49) and read them (!50)
    - Write arrays (!49) and read them (!50)
    - Write binary data (!49)
    - Write JS (!49)
    - Write datetime (49)
    - Write null (!49) and read them (!50)
    
    ### DSL
    
    - Added the filter operator `$nin` (!52)
    - Added the filter operator `$regex` (!56)
    - Added the convenience function `BsonNode.toBson()` (!54)
    
    ### Synchronous driver
    
    - Moved `UpdatePipelineOperators` into the correct package (!54)
    
    ### Deployment
    
    - The project is now tested with MongoDB versions 6.0.21, 7.0.18 and 8.0.6 (!53)
    
  • 0.13.0

    protected Release: 0.13.0 • Arbitrary BSON writers and parsers
    Arbitrary BSON writers and parsers
    
    ### BSON
    
    The `:bson` module's documentation on the Kotlin MongoDB driver has been removed.
    
    There are multiple breaking changes related to this refactor. For example, `buildBsonDocument` and `buildBsonArray` are now members of `BsonContext` instead of being top-level functions.
    
    - Everything but the interface definitions for arbitrary BSON writers and parsers has been removed from the `:bson` module
    - The BSON parser and writer based on the Kotlin MongoDB driver has been moved to the new module `:bson-official` (67567b42)
    - BSON tests for parsers and writers have been moved to the new module `:bson-tests` (5bef8c13)
    - Support most Kotlin platforms (9af59a3b)
    
    ### Annotations
    
    - Support most Kotlin platforms (9af59a3b)
    
    ### DSL
    
    - Utilities related to the official MongoDB driver have been moved to the `:driver-shared-official` internal module (404cbb38)
    
    ### Documentation
    
    - Changed the Maven metadata from linking to the repository to linking to the documentation website (8ca2a2df)
    
  • 0.12.1

    protected Release: 0.12.1 • Embedded documentation improvements
    Documentation improvements
    
    ### Documentation
    
    Updated Dokka for MkDocs to version 0.5.0, bringing many improvements to the embedded API reference in the website.
    
  • 0.12.0

    protected Release: 0.12.0 • Array aggregation operators, and more
    Array handling aggregation operators and more
    
    ```kotlin
    users.aggregate()
        .project {
            include(User::name)
            User::bestPassingGrades set User::grades
                .filter { it gt of(50) }
                .map { it / Grade::value }
                .sortedDescending()
                .take(3)
        }
    ```
    
    ### DSL
    
    - Added the `$filter` aggregation operator (59740316, !46)
    - Added the `$map` aggregation operator (5c903096, !46)
    - Added the `$firstN` and `$lastN` aggregation operators (721b1b07, 721b1b07, !46)
    - Added the `$sortArray` aggregation operator (f736c402, a607fcce, !46)
    - Added the `$getField` aggregation operator (28946504, !46)
    - Added the `$ceil` aggregation operator (7481c6ab, !42)
    - Added the `$floor` aggregation operator (d04f4b7f, !42)
    - Added the `$count` aggregation stage (f14132bd, !45)
    - Fixed incorrect type parameters for `$degreesToRadians` and `$radiansToDegrees` (fb01397c, !43)
    
    ### Documentation
    
    - Renamed the DSL module from 'Query DSL' to 'Request DSL' (859f3737, !42)
    - Added an example to `SortOptionDsl` (91c044ac, !43)
    
    ### Dependencies
    
    - KotlinX.Coroutines 1.10.1
    - KotlinX.Serialization 1.8.0
    - MongoDB Kotlin driver 5.3.1
    - BSON JS 6.10.3
    
  • 0.11.0

    protected Release: 0.11.0 • Aggregation stages $unset, $project, $sort and $unionWith, sorting in find(), $concat aggregation operator
    Aggregation stages $unset, $project, $sort and $unionWith, sorting in find(), $concat aggregation operator
    
    ### DSL
    
    - Add the $unset aggregation stage (4be311d4, !38)
    - Add the $project aggregation stage (e27a6869, !38)
    - Add the $sort aggregation stage (8040445f, !39)
    - Add the $unionWith aggregation stage (d3773e41, !39)
    - Add the $concat aggregation operator (892491e8, !37)
    - Add sorting in find()'s options (c6b2acd8, !39)
    - Allow using the '/' notation on nullable fields (d08211e1, !39)
    - Improve toString of Mongo iterables (e8372cd1, !39)
    - Fix documentation error in the $add aggregation operator (b6db3ff2, !37)
    - Fix outdated Pipeline documentation (40c30ce3, !39)
    - Documentation improvements around aggregation pipelines (bd23fefa, !41)
    - Forbid nullable documents in models, as MongoDB doesn't allow them (5efad8f1, !39)
    
    ### Kotlin BSON
    
    - Various documentation improvements and clarifications (e17b899e, !41)
    
  • 0.10.0

    protected Release: 0.10.0 • $add, $abs and trigonometry operators
    $add, $abs and trigonometry operators
    
    ### DSL
    
    - Add the `$add` aggregation operator (#7, 4c8eedbe, !33)
    - Add the `$abs` aggregation operator (#7, 056da623, !35)
    - Add trigonometry aggregation operators `$cos`, `$cosh`, `$acos`, `$acosh`, `$sin`, `$sinh`, `$asin`, `$asinh`, `$tan`, `$tanh`, `$atan`, `$atanh` (#7, !35)
    - Move the aggregation conversion functions (`of()`) higher in the `ValueDsl` hierarchy (224c601a, !33)
    - Rename `ConditionalOperators` to `ConditionalValueOperators` (edf69970, !33)
    - Rename `SetOperators` to `SetStageOperators` (bc343596, !33)
    
    ### Documentation
    
    - Add a 'news' section to the website with changelogs (!34)
    - Add the BSON module in the API reference (!36)
    
  • 0.9.0

    protected Release: 0.9.0 • $cond, setIf, setUnless and +=
    $cond and +=
    
    ### DSL
    
    - Add the aggregation operator $cond (!32)
    - The update operator $inc can now be written += (!32)
    - Add the update operators setIf & setUnless (!32)
    - Add the aggregation operators setIf & setUnless (!32)