Tags give the ability to mark specific points in history as being important
-
0.25.1
protectedRelease: 0.25.1 • Fixed documentation issue36b11ed4 · ·Technical fixes Fixed a technical issue in the documentation website.
-
0.25.0
protectedRelease: 0.25.0 • BsonContext/BsonFactory split, serialization annotation support, experimental BsonPath and eager multiplatform BSON68bd11f1 · ·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
protectedRelease: 0.24.0 • Mokodee, unset shorthand and easier KMongo migration222935e0 · ·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
protectedRelease: 0.23.0 • Multiplatform KotlinX.Serialization, Field.unsafe expansion, replace and KMongo utilities8d14523c · ·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
protectedRelease: 0.22.0 • WASI, averages and aggregation deserialization fixes39553520 · ·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
protectedRelease: 0.21.0 • $group and string aggregation operatorscd3385e9 · ·$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
protectedRelease: 0.20.1 • Fixed documentation website deploymentb81ae847 · ·Fixed documentation website deployment
-
0.20.0
protectedRelease: 0.20.0 • $addToSet, $currentDate and the new documentation website6509d83c · ·$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
protectedRelease: 0.19.0 • Pure Kotlin ObjectId and Timestamp, $switch, type aggregation operators, bitwise filter operators, writeConcern and readPreferencee79e780f · ·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
protectedRelease: 0.18.0 • ObjectId, range operators, $min and $max, read concern and Java usage92644b69 · ·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
protectedRelease: 0.17.0 • $mul and Field.unsafefbbb2273 · ·$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
protectedRelease: 0.16.0 • skip, maxTimeMS, MinKey, MaxKey887f1b5a · ·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
protectedRelease: 0.15.0 • `$regex` flexibility, simpler options, `Reader.toBson`ddebfcee · ·`$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
protectedRelease: 0.14.0 • Start of the Multiplatform driver, the great rename, $nin and $regex3010e0f6 · ·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
protectedRelease: 0.13.0 • Arbitrary BSON writers and parsers957e514e · ·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
protectedRelease: 0.12.1 • Embedded documentation improvements38154ad1 · ·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
protectedRelease: 0.12.0 • Array aggregation operators, and more234c9f0c · ·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
protectedRelease: 0.11.0 • Aggregation stages $unset, $project, $sort and $unionWith, sorting in find(), $concat aggregation operatore93b18ea · ·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
protectedRelease: 0.10.0 • $add, $abs and trigonometry operatorsf53a4008 · ·$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
protectedRelease: 0.9.0 • $cond, setIf, setUnless and +=4c9ab331 · ·$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)