Tags

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

    protected Release: 0.27.0 • Update return type, Java document conversions and improved documentation
    Update return type, Java document conversions and improved documentation
    
    ### BSON
    
    - Improved the documentation of `ObjectId` and `ObjectIdGenerator` (#109, 1c2765f4, !198)
    - Improved the documentation of `ObjectId.Serializer` and `Timestamp.Serializer` (#108, !199)
    - Fixed documentation mistakes regarding the bounds of `ObjectId` (0055e7a6, !198)
    
    ### BSON (official)
    
    - Added `JvmBsonFactory.readDocument()`, `readArray()` and `readValue()` to convert from official types to their KtMongo equivalents (bce89d5b)
    
    ### DSL
    
    - Added `Field<T, V>.toBsonPath()` (#113, !201)
    
    ### Drivers
    
    - Added `UpdateResult` and `UpsertResult`, the return types of `updateOne`, `updateMany`, `upsertOne` and their aggregation equivalents (#110, !197)
    
    ### Dependencies
    
    - Kotlin 2.3.10
    
  • 0.26.3

    protected Release: 0.26.3 • Fixes for the official drivers' codecs
    Fixes for the official drivers' codecs
    
    ### BSON
    
    - The `kotlin.time.Instant` has been stabilized in Kotlin 2.3.0. The `@ExperimentalTime` annotation has thus been removed from all methods that use it internally (!196)
    
    ### Drivers (official)
    
    - Fixed the drivers not using the configured KtMongo codecs in their methods (!195)
    
    ### Dependencies
    
    - Kotlin 2.3.0
    
  • 0.26.2

    protected Release: 0.26.2 • KotlinX.Serialization uniformisation
    KotlinX.Serialization unity
    
    ### BSON (Official)
    
    The MongoDB official driver has two main serialization modes: `:bson-kotlin` (based on reflection) and `:bson-kotlinx` (based on KotlinX.Serialization). These two systems serialize objects slightly differently.
    
    Most notably, the newly-added types `kotlin.time.Instant` and `kotlin.uuid.Uuid` are both serialized by `:bson-kotlinx` as strings, but are serialized to the corresponding BSON type by `:bson-kotlin`.
    This release introduces the serializers `InstantAsBsonDatetimeSerializer` and `UuidAsBsonBinarySerializer` which use the BSON type no matter what serialization library is used, but also support JSON serialization as strings.
    Users have to enable them explicitly (see their documentation to learn how).
    
    In this version, we also ensured that the KtMongo types (`ObjectId` and `Timestamp`) are serialized correctly using both serialization strategies.
    
  • 0.26.1

    protected Release: 0.26.1 • MavenCentral publication fix
    Fix MavenCentral publication
    
  • 0.26.0

    protected Release: 0.26.0 • Bson equality & diffing, expanded BsonPath
    BSON equality and diffing, expanded BsonPath, Java driver, and improved documentation
    
    ### BSON
    
    - Added `equals` and `hashCode` implementations for all BSON types, to allow checking if two BSON documents are identical (a073e815, !176)
    - Added `BsonDocumentReader.names` to iterate the field names (d26da4fb, !184)
    - Added `BsonArrayReader.indices` and `.size` to iterate over elements (ea9e5817, 3b354010, !184)
    - The official and multiplatform implementations are now tested with the same suite (bba1d7bf, !173)
    - Fixed broken documentation links in `Bson` and `BsonArray` (d265b02b)
    - Improved the documentation of `BsonType` (3da19f42, !185)
    - Explicitly document that `BsonType.ordinal` shouldn't be used (4ef5848e, !185)
    
    ### BSON (official)
    
    - Fixed `BsonValueReader.read` when reading a primitive JVM type (fbdfd880)
    - Fixed `BsonValueReader.toString()` which did not return a JSON representation (19a34ea5)
    
    ### BSON (multiplatform)
    
    - Fixed thread safety issue in `Bson.eager()` and `BsonArray.eager()` (#102, !179)
    
    ### BsonPath
    
    - Renamed the parsing method from `BsonPath.parse("$.a")` to `BsonPath("$.a")` (30a09f83, #93, !165)
    - Add `Bson.select("$.a")` as a shorthand for `Bson.select(BsonPath("$.a"))` (a7b68c1a, #93, !165)
    - Add support for `BsonPath.all`/`$.*` (5e8db0f2, #93, !165)
    - Add support for `BsonPath.sliced`/`$[1:5:2]` (10f2c1c5, #93, !165)
    - Add support for `BsonPath[-1]`/`$[-1]` (01a0781f, #93, !165)
    - Add support for `BsonPath.any()`/`$["foo", "bar"]` (895c2fda, #93, !182)
    - Improve testing of BsonPath expressions
    
    ### BSON diff
    
    - Add `doc1 diff doc2` to display a human-readable difference of two BSON values, primarily intended for tests (#98, !177)
    
    ### Java driver
    
    - Fixed publishing issue. The Java module should now be published alongside all other modules (!180)
    
    ### Documentation
    
    - Improved the module-level documentation for all modules (#88, !181)
    
  • 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)