<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title>OpenSavvy KtMongo</title><description>The next MongoDB driver for Kotlin </description><link>https://ktmongo.opensavvy.dev/</link><atom:link href="https://ktmongo.opensavvy.dev/feed_rss_created.xml" rel="self" type="application/rss+xml" /> <managingEditor>OpenSavvy and contributors</managingEditor><docs>https://gitlab.com/opensavvy/ktmongo</docs><language>en</language> <pubDate>Sun, 21 Jun 2026 16:21:16 -0000</pubDate> <lastBuildDate>Sun, 21 Jun 2026 16:21:16 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.17.9</generator> <image> <url>None</url> <title>OpenSavvy KtMongo</title> <link>https://ktmongo.opensavvy.dev/</link> </image> <item> <title>0.31.0 • Array update operators, GeoJSON operators, KMongo migration documentation and Multiplatform insertOne</title> <description>&lt;h1&gt;0.31.0 • Array update operators, GeoJSON operators, KMongo migration documentation and Multiplatform insertOne&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Allow re-encoding a &lt;code&gt;Bson&lt;/code&gt; value to another implementation (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/832b763e&#34;&gt;832b763e&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;Geo.CoordinateReferenceSystem&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/a79a3e56&#34;&gt;a79a3e56&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;Geo.writeTo(BsonFieldWriter)&lt;/code&gt; for easy serialization (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/0c63ce67&#34;&gt;0c63ce67&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;p&gt;Update operators:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;arrayFilters&lt;/code&gt; support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/3&#34;&gt;#3&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/242&#34;&gt;!242&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$pop&lt;/code&gt; support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/8366d4a0&#34;&gt;8366d4a0&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/246&#34;&gt;!246&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$pull&lt;/code&gt; support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/fe025cca&#34;&gt;fe025cca&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/246&#34;&gt;!246&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$bit&lt;/code&gt; support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/252&#34;&gt;!252&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Filter operators:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;$near&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/f2e71695&#34;&gt;f2e71695&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/248&#34;&gt;!248&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$nearSphere&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/857941aa&#34;&gt;857941aa&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/248&#34;&gt;!248&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$geoWithin&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/4904317e&#34;&gt;4904317e&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/248&#34;&gt;!248&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$geoIntersects&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/bfcd4318&#34;&gt;bfcd4318&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/248&#34;&gt;!248&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$mod&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/6e0b89a2&#34;&gt;6e0b89a2&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/250&#34;&gt;!250&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Everything else:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Merge different calls to the &lt;code&gt;sort&lt;/code&gt; option (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/5b3e4412&#34;&gt;5b3e4412&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;KMongo compat: Allow overriding the &lt;code&gt;PropertyNameStrategy&lt;/code&gt; in &lt;code&gt;asKtMongo()&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/dd15b39e&#34;&gt;dd15b39e&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Multiplatform&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Ability to connect to the database! (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/172&#34;&gt;!172&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;insertOne&lt;/code&gt; support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/172&#34;&gt;!172&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/from-kmongo/setup.html&#34;&gt;KMongo setup guide&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Rewrote the &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/from-kmongo/migrate.html&#34;&gt;KMongo operator migration guide&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Fixed incorrect example of the &lt;code&gt;sort&lt;/code&gt; option (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/8cbe186a&#34;&gt;8cbe186a&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Kotlin 2.4.0&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/06/21/v0.31.0.html</link> <pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/06/21/v0.31.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/06/21/v0.31.0.png" type="image/png" length="None" /> </item> <item> <title>0.30.0 • BSON refactor, type-aware operators and Multiplatform progress</title> <description>&lt;h1&gt;0.30.0 • BSON refactor, type-aware operators and Multiplatform progress&lt;/h1&gt; &lt;p&gt;This is KtMongo&#39;s greatest release yet. It contains multiple breaking changes, though they should not impact users in major ways.&lt;/p&gt; &lt;h3&gt;The BSON refactor&lt;/h3&gt; &lt;p&gt;With the growth of the library, we have noticed that the design of the BSON classes was suboptimal.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;code&gt;Bson&lt;/code&gt; has been renamed to &lt;code&gt;BsonDocument&lt;/code&gt;&lt;/li&gt; &lt;li&gt;&lt;code&gt;BsonValue&lt;/code&gt; has been created&lt;/li&gt; &lt;li&gt;&lt;code&gt;BsonDocumentReader&lt;/code&gt; has been removed (its functionality is now included directly in &lt;code&gt;BsonDocument&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;&lt;code&gt;BsonArrayReader&lt;/code&gt; has been removed (its functionality is now included directly in &lt;code&gt;BsonArray&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;&lt;code&gt;BsonValueReader&lt;/code&gt; has been removed (its functionality is now included directly in &lt;code&gt;BsonValue&lt;/code&gt;)&lt;/li&gt; &lt;li&gt;All reading methods have been renamed to &lt;code&gt;encode&lt;/code&gt; variants&lt;/li&gt; &lt;li&gt;The API to access data from &lt;code&gt;BsonDocument&lt;/code&gt;, &lt;code&gt;BsonArray&lt;/code&gt; and &lt;code&gt;BsonValue&lt;/code&gt; has been rewritten, with conversion functions to &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;List&lt;/code&gt;, &lt;code&gt;Iterable&lt;/code&gt; and &lt;code&gt;Sequence&lt;/code&gt;&lt;/li&gt; &lt;li&gt;All implementations now throw the same &lt;code&gt;BsonDecodingException&lt;/code&gt; on failure&lt;/li&gt; &lt;li&gt;We now test KtMongo against both the official&#39;s reflection-based and KotlinX.Serialization-based libraries&lt;/li&gt; &lt;li&gt;&lt;code&gt;BsonDocument&lt;/code&gt;, &lt;code&gt;BsonArray&lt;/code&gt; and &lt;code&gt;BsonValue&lt;/code&gt; has a &lt;code&gt;factory&lt;/code&gt; property to access the factory which created them (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/0fb55a77&#34;&gt;0fb55a77&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;The types &lt;code&gt;BsonDocument&lt;/code&gt;, &lt;code&gt;BsonArray&lt;/code&gt; and &lt;code&gt;BsonValue&lt;/code&gt; can now be serialized and deserialized, which is convenient for handling dynamic or untyped data (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/238&#34;&gt;!238&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Related changes in the official BSON implementation:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;code&gt;BsonFactory&lt;/code&gt; is changed from an &lt;code&gt;interface&lt;/code&gt; to an &lt;code&gt;expect class&lt;/code&gt;&lt;/li&gt; &lt;li&gt;Kotlin primitive types can now be serialized and deserialized without additional configuration (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/60a016ae&#34;&gt;60a016ae&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;For more information, see &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/112&#34;&gt;#112&lt;/a&gt; and &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/223&#34;&gt;!223&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;The operators refactor&lt;/h3&gt; &lt;p&gt;The KtMongo DSL now has a templating engine, which allows generating convenience overloads for most operators. In most situations, aggregation queries don&#39;t need the &lt;code&gt;of()&lt;/code&gt; operator anymore.&lt;/p&gt; &lt;p&gt;Before: &lt;code&gt;kotlin Target::score set (of(2) * of(Target::score) * of(3))&lt;/code&gt;&lt;/p&gt; &lt;p&gt;After: &lt;code&gt;kotlin Target::score set (2 * Target::score * 3)&lt;/code&gt;&lt;/p&gt; &lt;p&gt;All operators now have an additional overload that accepts &lt;code&gt;KType&lt;/code&gt; as a last parameter. These overloads are not meant to be called directly by users, you should almost always call the overload that doesn&#39;t have a &lt;code&gt;KType&lt;/code&gt; parameter.&lt;/p&gt; &lt;p&gt;Operators are now &lt;code&gt;inline reified&lt;/code&gt;, which allows the serialization library to know about type parameters (which were previously stripped during compilation). This information is not yet used in all situations.&lt;/p&gt; &lt;p&gt;Additionally:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The syntax of the &lt;a href=&#34;https://ktmongo.opensavvy.dev/api/dsl/opensavvy.ktmongo.dsl.aggregation.operators/-conditional-value-operators/index.html#switch&#34;&gt;&lt;code&gt;switch&lt;/code&gt; conditional aggregation operator&lt;/a&gt; has changed: the value is now defined with &lt;code&gt;then&lt;/code&gt; instead of &lt;code&gt;to&lt;/code&gt;&lt;/li&gt; &lt;li&gt;The &lt;code&gt;addToSet&lt;/code&gt; overload that accepts a list has been renamed to &lt;a href=&#34;https://ktmongo.opensavvy.dev/api/dsl/opensavvy.ktmongo.dsl.query/-update-query/index.html#addeachtoset&#34;&gt;&lt;code&gt;addEachToSet&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;Field.unsafeCast&amp;lt;T&amp;gt;()&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/7a5170bd&#34;&gt;7a5170bd&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added the &lt;a href=&#34;https://ktmongo.opensavvy.dev/api/dsl/opensavvy.ktmongo.dsl.query/-update-query/index.html#push&#34;&gt;&lt;code&gt;$push&lt;/code&gt; update operator&lt;/a&gt; with its different options (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/236&#34;&gt;!236&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Route to Multiplatform&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The entire DSL can now compile and run on KotlinJS in addition to the JVM (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/239&#34;&gt;!239&lt;/a&gt;). More platforms are coming in the future.&lt;/li&gt; &lt;li&gt;The repository now contains a prototype Multiplatform driver (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/240&#34;&gt;!240&lt;/a&gt;).&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;GeoJSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the seven GeoJSON data types under the &lt;a href=&#34;https://ktmongo.opensavvy.dev/api/bson/opensavvy.ktmongo.bson.types/-geo/index.html&#34;&gt;&lt;code&gt;Geo&lt;/code&gt; interface&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/76&#34;&gt;#76&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/241&#34;&gt;!241&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;For now, no operators use them. However, they are serializable.&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Deployment&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Apple x64 targets have been removed, because they are deprecated&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The tutorial pages now link directly to the API reference (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/624fb8c4&#34;&gt;624fb8c4&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Reworked the &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/index.html&#34;&gt;Getting Started&lt;/a&gt; page to mention the different KtMongo flavors (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/806fc7ed&#34;&gt;806fc7ed&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added detailed pages on &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/official/serialization-kotlinx.html&#34;&gt;KotlinX.Serialization&lt;/a&gt;, &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/official/serialization-reflection.html&#34;&gt;Reflection&lt;/a&gt; and &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/official/serialization-custom.html&#34;&gt;custom&lt;/a&gt; serialization strategies.&lt;/li&gt; &lt;li&gt;Java driver: fixed missing pages and incorrect examples (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/abfb3301&#34;&gt;abfb3301&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/6317e9ef&#34;&gt;6317e9ef&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/05/17/v0.30.0.html</link> <pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/05/17/v0.30.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/05/17/v0.30.0.png" type="image/png" length="59637" /> </item> <item> <title>0.29.1 • Documentation improvements</title> <description>&lt;h1&gt;0.29.1 • Documentation improvements&lt;/h1&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The &lt;code&gt;FieldDsl&lt;/code&gt; constructor only needs a &lt;code&gt;PropertyNameStrategy&lt;/code&gt;, not a full &lt;code&gt;BsonContext&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/43f4c7ca&#34;&gt;43f4c7ca&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed documentation implying that the indexing operator is written &lt;code&gt;.$0.&lt;/code&gt; instead of &lt;code&gt;.0.&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/dccf5246&#34;&gt;dccf5246&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Fixed links, improved phrasing (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/5c83aea8&#34;&gt;5c83aea8&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/67399f3e&#34;&gt;67399f3e&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Deployment&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Removed Intel-based Apple targets, as they are deprecated by Apple (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/224&#34;&gt;!224&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/04/14/v0.29.1.html</link> <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/04/14/v0.29.1.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/04/14/v0.29.1.png" type="image/png" length="51783" /> </item> <item> <title>0.29.0 • ### MongoDB support</title> <description>&lt;h1&gt;0.29.0 • ### MongoDB support&lt;/h1&gt; &lt;p&gt;Due to a &lt;a href=&#34;https://github.com/google/tcmalloc/issues/292&#34;&gt;tcmalloc bug&lt;/a&gt;, MongoDB 8.x cannot run under the Linux kernel 6.19+. Because our testing infrastructure runs under such a kernel, we are not able to continue testing the library with MongoDB 8.x. We are not aware of any differences in MongoDB 8.x that could affect KtMongo. Testing will MongoDB 8.x will restart once tcmalloc is fixed. Follow &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/work_items/116&#34;&gt;this issue&lt;/a&gt; to learn more.&lt;/p&gt; &lt;p&gt;Additionally, we will no longer support MongoDB 6.x releases, as MongoDB themselves have stopped supporting it.&lt;/p&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added support for JSONPath filter expressions: &lt;code&gt;BsonPath(&#34;$.[?a&amp;gt;b]&#34;)&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/183&#34;&gt;!183&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (Multiplatform)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Removed useless logging (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/217&#34;&gt;!217&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the &lt;code&gt;$median&lt;/code&gt; and &lt;code&gt;$percentile&lt;/code&gt; accumulators (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/7&#34;&gt;#7&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/213&#34;&gt;!213&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;MongoCollection.exists {}&lt;/code&gt; to efficiently test if a document exists (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/56&#34;&gt;#56&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/218&#34;&gt;!218&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The API reference will now be built with Dokka MkDocs 0.6.1, which provides many major improvements. Your bookmarks may have become invalid.&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/03/24/v0.29.0.html</link> <pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/03/24/v0.29.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/03/24/v0.29.0.png" type="image/png" length="46283" /> </item> <item> <title>0.28.1 • Improved documentation</title> <description>&lt;h1&gt;0.28.1 • Improved documentation&lt;/h1&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the &lt;code&gt;FieldDsl&lt;/code&gt; constructor (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/d0472ba2&#34;&gt;d0472ba2&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/214&#34;&gt;!214&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Renamed the documentation page titles (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/206&#34;&gt;!206&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Renamed the module titles (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/209&#34;&gt;!209&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/03/21/v0.28.1.html</link> <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/03/21/v0.28.1.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/03/21/v0.28.1.png" type="image/png" length="49664" /> </item> <item> <title>0.28.0 • BSON Vector support, easily create ObjectId instances, usability improvements</title> <description>&lt;h1&gt;0.28.0 • BSON Vector support, easily create ObjectId instances, usability improvements&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added support for vector types: &lt;code&gt;Vector&lt;/code&gt;, &lt;code&gt;ByteVector&lt;/code&gt;, &lt;code&gt;FloatVector&lt;/code&gt; and &lt;code&gt;BooleanVector&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/106&#34;&gt;#106&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/194&#34;&gt;!194&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers (official)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the method &lt;code&gt;MongoCollection.newId()&lt;/code&gt; to easily generate new &lt;code&gt;ObjectId&lt;/code&gt; instances using the collection&#39;s generator (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/203&#34;&gt;!203&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Fixed a dependency declaration issue which lead to &lt;code&gt;JvmBsonContext&lt;/code&gt; not being available to users (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/207&#34;&gt;!207&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed &lt;code&gt;gteNotNull&lt;/code&gt; and similar operators breaking when the optional filter is not present (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/204&#34;&gt;!204&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Nullable numbers are now allowed in aggregation accumulators (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/205&#34;&gt;!205&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/03/11/v0.28.0.html</link> <pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/03/11/v0.28.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/03/11/v0.28.0.png" type="image/png" length="58857" /> </item> <item> <title>0.27.0 • Update return type, Java document conversions and improved documentation</title> <description>&lt;h1&gt;0.27.0 • Update return type, Java document conversions and improved documentation&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Improved the documentation of &lt;code&gt;ObjectId&lt;/code&gt; and &lt;code&gt;ObjectIdGenerator&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/109&#34;&gt;#109&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/1c2765f4&#34;&gt;1c2765f4&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/198&#34;&gt;!198&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Improved the documentation of &lt;code&gt;ObjectId.Serializer&lt;/code&gt; and &lt;code&gt;Timestamp.Serializer&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/108&#34;&gt;#108&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/199&#34;&gt;!199&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Fixed documentation mistakes regarding the bounds of &lt;code&gt;ObjectId&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/0055e7a6&#34;&gt;0055e7a6&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/198&#34;&gt;!198&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (official)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;JvmBsonFactory.readDocument()&lt;/code&gt;, &lt;code&gt;readArray()&lt;/code&gt; and &lt;code&gt;readValue()&lt;/code&gt; to convert from official types to their KtMongo equivalents (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/bce89d5b&#34;&gt;bce89d5b&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;Field&amp;lt;T, V&amp;gt;.toBsonPath()&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/113&#34;&gt;#113&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/201&#34;&gt;!201&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;UpdateResult&lt;/code&gt; and &lt;code&gt;UpsertResult&lt;/code&gt;, the return types of &lt;code&gt;updateOne&lt;/code&gt;, &lt;code&gt;updateMany&lt;/code&gt;, &lt;code&gt;upsertOne&lt;/code&gt; and their aggregation equivalents (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/110&#34;&gt;#110&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/197&#34;&gt;!197&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Kotlin 2.3.10&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/03/03/v0.27.0.html</link> <pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/03/03/v0.27.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/03/03/v0.27.0.png" type="image/png" length="55127" /> </item> <item> <title>0.26.3 • Fixes for the official drivers&#39; codecs</title> <description>&lt;h1&gt;0.26.3 • Fixes for the official drivers&#39; codecs&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The &lt;code&gt;kotlin.time.Instant&lt;/code&gt; has been stabilized in Kotlin 2.3.0. The &lt;code&gt;@ExperimentalTime&lt;/code&gt; annotation has thus been removed from all methods that use it internally (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/196&#34;&gt;!196&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers (official)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed the drivers not using the configured KtMongo codecs in their methods (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/195&#34;&gt;!195&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Kotlin 2.3.0&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/02/28/v0.26.3.html</link> <pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/02/28/v0.26.3.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/02/28/v0.26.3.png" type="image/png" length="60110" /> </item> <item> <title>0.26.2 • KotlinX.Serialization unity</title> <description>&lt;h1&gt;0.26.2 • KotlinX.Serialization unity&lt;/h1&gt; &lt;h3&gt;BSON (Official)&lt;/h3&gt; &lt;p&gt;The MongoDB official driver has two main serialization modes: &lt;code&gt;:bson-kotlin&lt;/code&gt; (based on reflection) and &lt;code&gt;:bson-kotlinx&lt;/code&gt; (based on KotlinX.Serialization). These two systems serialize objects slightly differently.&lt;/p&gt; &lt;p&gt;Most notably, the newly-added types &lt;code&gt;kotlin.time.Instant&lt;/code&gt; and &lt;code&gt;kotlin.uuid.Uuid&lt;/code&gt; are both serialized by &lt;code&gt;:bson-kotlinx&lt;/code&gt; as strings, but are serialized to the corresponding BSON type by &lt;code&gt;:bson-kotlin&lt;/code&gt;. This release introduces the serializers &lt;code&gt;InstantAsBsonDatetimeSerializer&lt;/code&gt; and &lt;code&gt;UuidAsBsonBinarySerializer&lt;/code&gt; 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).&lt;/p&gt; &lt;p&gt;In this version, we also ensured that the KtMongo types (&lt;code&gt;ObjectId&lt;/code&gt; and &lt;code&gt;Timestamp&lt;/code&gt;) are serialized correctly using both serialization strategies.&lt;/p&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/02/16/v0.26.2.html</link> <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/02/16/v0.26.2.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/02/16/v0.26.2.png" type="image/png" length="48792" /> </item> <item> <title>0.26.1 • Fix MavenCentral publication</title> <description>&lt;h1&gt;0.26.1 • Fix MavenCentral publication&lt;/h1&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/02/04/v0.26.1.html</link> <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/02/04/v0.26.1.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/02/04/v0.26.1.png" type="image/png" length="51709" /> </item> <item> <title>0.26.0 • BSON equality and diffing, expanded BsonPath, Java driver, and improved documentation</title> <description>&lt;h1&gt;0.26.0 • BSON equality and diffing, expanded BsonPath, Java driver, and improved documentation&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;equals&lt;/code&gt; and &lt;code&gt;hashCode&lt;/code&gt; implementations for all BSON types, to allow checking if two BSON documents are identical (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/a073e815&#34;&gt;a073e815&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/176&#34;&gt;!176&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;BsonDocumentReader.names&lt;/code&gt; to iterate the field names (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/d26da4fb&#34;&gt;d26da4fb&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/184&#34;&gt;!184&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;BsonArrayReader.indices&lt;/code&gt; and &lt;code&gt;.size&lt;/code&gt; to iterate over elements (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/ea9e5817&#34;&gt;ea9e5817&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/3b354010&#34;&gt;3b354010&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/184&#34;&gt;!184&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;The official and multiplatform implementations are now tested with the same suite (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/bba1d7bf&#34;&gt;bba1d7bf&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/173&#34;&gt;!173&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Fixed broken documentation links in &lt;code&gt;Bson&lt;/code&gt; and &lt;code&gt;BsonArray&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/d265b02b&#34;&gt;d265b02b&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Improved the documentation of &lt;code&gt;BsonType&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/3da19f42&#34;&gt;3da19f42&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/185&#34;&gt;!185&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Explicitly document that &lt;code&gt;BsonType.ordinal&lt;/code&gt; shouldn&#39;t be used (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/4ef5848e&#34;&gt;4ef5848e&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/185&#34;&gt;!185&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (official)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed &lt;code&gt;BsonValueReader.read&lt;/code&gt; when reading a primitive JVM type (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/fbdfd880&#34;&gt;fbdfd880&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Fixed &lt;code&gt;BsonValueReader.toString()&lt;/code&gt; which did not return a JSON representation (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/19a34ea5&#34;&gt;19a34ea5&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (multiplatform)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed thread safety issue in &lt;code&gt;Bson.eager()&lt;/code&gt; and &lt;code&gt;BsonArray.eager()&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/102&#34;&gt;#102&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/179&#34;&gt;!179&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BsonPath&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Renamed the parsing method from &lt;code&gt;BsonPath.parse(&#34;$.a&#34;)&lt;/code&gt; to &lt;code&gt;BsonPath(&#34;$.a&#34;)&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/30a09f83&#34;&gt;30a09f83&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/165&#34;&gt;!165&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Add &lt;code&gt;Bson.select(&#34;$.a&#34;)&lt;/code&gt; as a shorthand for &lt;code&gt;Bson.select(BsonPath(&#34;$.a&#34;))&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/a7b68c1a&#34;&gt;a7b68c1a&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/165&#34;&gt;!165&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Add support for &lt;code&gt;BsonPath.all&lt;/code&gt;/&lt;code&gt;$.*&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/5e8db0f2&#34;&gt;5e8db0f2&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/165&#34;&gt;!165&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Add support for &lt;code&gt;BsonPath.sliced&lt;/code&gt;/&lt;code&gt;$[1:5:2]&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/10f2c1c5&#34;&gt;10f2c1c5&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/165&#34;&gt;!165&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Add support for &lt;code&gt;BsonPath[-1]&lt;/code&gt;/&lt;code&gt;$[-1]&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/01a0781f&#34;&gt;01a0781f&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/165&#34;&gt;!165&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Add support for &lt;code&gt;BsonPath.any()&lt;/code&gt;/&lt;code&gt;$[&#34;foo&#34;, &#34;bar&#34;]&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/895c2fda&#34;&gt;895c2fda&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/182&#34;&gt;!182&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Improve testing of BsonPath expressions&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON diff&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Add &lt;code&gt;doc1 diff doc2&lt;/code&gt; to display a human-readable difference of two BSON values, primarily intended for tests (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/98&#34;&gt;#98&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/177&#34;&gt;!177&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Java driver&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed publishing issue. The Java module should now be published alongside all other modules (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/180&#34;&gt;!180&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Improved the module-level documentation for all modules (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/88&#34;&gt;#88&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/181&#34;&gt;!181&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/01/30/v0.26.0.html</link> <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/01/30/v0.26.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/01/30/v0.26.0.png" type="image/png" length="57327" /> </item> <item> <title>0.25.1 • Technical fixes</title> <description>&lt;h1&gt;0.25.1 • Technical fixes&lt;/h1&gt; &lt;p&gt;Fixed a technical issue in the documentation website.&lt;/p&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2026/01/02/v0.25.1.html</link> <pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2026/01/02/v0.25.1.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2026/01/02/v0.25.1.png" type="image/png" length="42152" /> </item> <item> <title>0.25.0 • BsonContext/BsonFactory split, serialization annotation support, experimental BsonPath and eager multiplatform BSON</title> <description>&lt;h1&gt;0.25.0 • BsonContext/BsonFactory split, serialization annotation support, experimental BsonPath and eager multiplatform BSON&lt;/h1&gt; &lt;h3&gt;BsonContext and BsonFactory&lt;/h3&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Breaking change&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Impacted modules: &lt;code&gt;:bson&lt;/code&gt;, &lt;code&gt;:dsl&lt;/code&gt;&lt;/p&gt; &lt;p&gt;See: &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/95&#34;&gt;#95&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/157&#34;&gt;!157&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;Since the start of the project, the configuration of BSON documents is stored by the &lt;code&gt;BsonContext&lt;/code&gt; interface. However, it was starting to become too big. Initially, &lt;code&gt;BsonContext&lt;/code&gt; was used for BSON object creation. In 0.19.0, it obtained the capability of creating &lt;code&gt;ObjectId&lt;/code&gt; instances. In this version, it would also have obtained the configuration for serializing paths.&lt;/p&gt; &lt;p&gt;In this release, it is changed as follows:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;code&gt;BsonContext&lt;/code&gt; is removed from &lt;code&gt;:bson&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;The new &lt;code&gt;BsonFactory&lt;/code&gt; interface becomes responsible from creating BSON documents.&lt;/li&gt; &lt;li&gt;The capability of creating new &lt;code&gt;ObjectId&lt;/code&gt; instances remains in &lt;code&gt;ObjectIdGenerator&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;A new &lt;code&gt;BsonContext&lt;/code&gt; interface is created in &lt;code&gt;:dsl&lt;/code&gt;, which aggregates the capabilities required by the DSL.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;If you created custom operators, you will need to switch the imports from the old &lt;code&gt;BsonContext&lt;/code&gt; to the new one.&lt;/p&gt; &lt;p&gt;Otherwise, end-users should not be impacted.&lt;/p&gt; &lt;h3&gt;PropertyNameStrategy&lt;/h3&gt; &lt;blockquote&gt; &lt;p&gt;Impacted modules: &lt;code&gt;:dsl&lt;/code&gt;, &lt;code&gt;:driver-sync-kmongo&lt;/code&gt;, &lt;code&gt;:driver-coroutines-kmongo&lt;/code&gt;&lt;/p&gt; &lt;p&gt;See: &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/89&#34;&gt;#89&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/151&#34;&gt;!151&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/157&#34;&gt;!157&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;The new interface &lt;code&gt;PropertyNameStrategy&lt;/code&gt; was added to configure how the &lt;code&gt;Foo::user / User::name&lt;/code&gt; 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.&lt;/p&gt; &lt;p&gt;When using one of the KMongo compatibility modules, the strategy used understands &lt;code&gt;@BsonId&lt;/code&gt; and KotlinX.Serialization&#39;s &lt;code&gt;@SerialName&lt;/code&gt;, as recommended by the KMongo documentation for the KotlinX.Serialization library.&lt;/p&gt; &lt;p&gt;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 &lt;code&gt;PropertyNameStrategy&lt;/code&gt; used by the driver.&lt;/p&gt; &lt;p&gt;We do not plan to add support for serialization annotations in the default implementation.&lt;/p&gt; &lt;p&gt;As a consequence, some methods have been moved from &lt;code&gt;Field&lt;/code&gt; to &lt;code&gt;FieldDsl&lt;/code&gt;.&lt;/p&gt; &lt;h3&gt;BsonPath&lt;/h3&gt; &lt;blockquote&gt; &lt;p&gt;Experimental&lt;/p&gt; &lt;p&gt;Impacted modules: &lt;code&gt;:bson&lt;/code&gt;&lt;/p&gt; &lt;p&gt;See: &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/2&#34;&gt;#2&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/93&#34;&gt;#93&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/146&#34;&gt;#146&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;Added the experimental &lt;code&gt;BsonPath&lt;/code&gt; interface to represent JSONPath-like accessors to BSON documents.&lt;/p&gt; &lt;p&gt;&lt;code&gt;BsonPath&lt;/code&gt; 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.&lt;/p&gt; &lt;p&gt;```kotlin val path = BsonPath.parse(&#34;$.users.1.name&#34;)&lt;/p&gt; &lt;p&gt;val name: String = myDocument at path ```&lt;/p&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Removed &lt;code&gt;@ExperimentalStdlibApi&lt;/code&gt; on the &lt;code&gt;ObjectId&lt;/code&gt; constructor as it has been stabilized in the standard library (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/b9ccf073&#34;&gt;b9ccf073&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;&lt;code&gt;ObjectId.Serializer&lt;/code&gt; has been changed from a class to an object (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/88f6947e&#34;&gt;88f6947e&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;&lt;code&gt;Timestamp.Serializer&lt;/code&gt; has been changed from a class to an object (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/88f6947e&#34;&gt;88f6947e&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (multiplatform)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Instances of &lt;code&gt;.reader()&lt;/code&gt; are now reused. This will make access to fields faster (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/60397c9d&#34;&gt;60397c9d&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;Bson.eager()&lt;/code&gt; and &lt;code&gt;BsonArray.eager()&lt;/code&gt; to eagerly initialize the readers, which makes them thread-safe. Improved the documentation on thread-safety (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/167&#34;&gt;!167&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Improved the documentation of &lt;code&gt;Bson&lt;/code&gt; and &lt;code&gt;BsonArray&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/167&#34;&gt;!167&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Kotlin 2.2.21&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/12/21/v0.25.0.html</link> <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/12/21/v0.25.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/12/21/v0.25.0.png" type="image/png" length="55640" /> </item> <item> <title>0.24.0 • Mokodee, unset shorthand and easier KMongo migration</title> <description>&lt;h1&gt;0.24.0 • Mokodee, unset shorthand and easier KMongo migration&lt;/h1&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the &lt;code&gt;unset&lt;/code&gt; shorthand for updates (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/1b49046f&#34;&gt;1b49046f&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/135&#34;&gt;!135&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added Mokodee, the KtMongo mascot! (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/c488893f&#34;&gt;c488893f&lt;/a&gt;, thanks to &lt;a href=&#34;https://bsky.app/profile/lilywhiteout.bsky.social&#34;&gt;Lilywhiteout&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added a set up guide to the KMongo migration guide (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/e663d70f&#34;&gt;e663d70f&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Reorganized and updated the Multiplatform roadmap (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/67f6816d&#34;&gt;67f6816d&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/716ce781&#34;&gt;716ce781&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Formatting improvements in the aggregation page (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/20d455fa&#34;&gt;20d455fa&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/35c79cf4&#34;&gt;35c79cf4&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Prepared 2.1.1&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/10/22/v0.24.0.html</link> <pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/10/22/v0.24.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/10/22/v0.24.0.png" type="image/png" length="60856" /> </item> <item> <title>0.23.0 • Multiplatform KotlinX.Serialization, Field.unsafe expansion, replace and KMongo utilities</title> <description>&lt;h1&gt;0.23.0 • Multiplatform KotlinX.Serialization, Field.unsafe expansion, replace and KMongo utilities&lt;/h1&gt; &lt;h3&gt;BSON (Multiplatform)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Multiplatform KotlinX.Serialization support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/50&#34;&gt;#50&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/117&#34;&gt;!117&lt;/a&gt;, thanks @UnknownJo&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/e796&#34;&gt;e796&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;Field.unsafe()&lt;/code&gt; overloads to allow more use-cases (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/132&#34;&gt;!132&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;&lt;code&gt;$concat&lt;/code&gt; now allows nullability, and has been moved from &lt;code&gt;ArithmeticValueOperators&lt;/code&gt; to &lt;code&gt;StringValueOperators&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/134&#34;&gt;!134&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;replaceOne()&lt;/code&gt; and &lt;code&gt;repsertOne()&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/133&#34;&gt;!133&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;:driver-sync-kmongo&lt;/code&gt; and &lt;code&gt;:driver-coroutines-kmongo&lt;/code&gt; with a utility function to convert KMongo objects to KtMongo objects (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/132&#34;&gt;!132&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Introduced the &lt;a href=&#34;https://ktmongo.opensavvy.dev/tutorials/multiplatform/index.html&#34;&gt;Kotlin Multiplatform roadmap&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/0861208a&#34;&gt;0861208a&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added a &lt;a href=&#34;https://ktmongo.opensavvy.dev/features/aggregations.html&#34;&gt;feature page on aggregations&lt;/a&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/f4bec354&#34;&gt;f4bec354&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Minor improvements on the home page&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/09/30/v0.23.0.html</link> <pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/09/30/v0.23.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/09/30/v0.23.0.png" type="image/png" length="41645" /> </item> <item> <title>0.22.0 • WASI, averages and aggregation deserialization fixes</title> <description>&lt;h1&gt;0.22.0 • WASI, averages and aggregation deserialization fixes&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added Wasm WASI support (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/126&#34;&gt;!126&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the &lt;code&gt;$avg&lt;/code&gt; accumulator (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/679ebb2c&#34;&gt;679ebb2c&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/127&#34;&gt;!127&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added the &lt;code&gt;$avg&lt;/code&gt; aggregator (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/ebdc71de&#34;&gt;ebdc71de&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/127&#34;&gt;!127&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Drivers&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Fixed &lt;code&gt;AggregationPipeline.reinterpret&lt;/code&gt; which attempted to deserialize the wrong type (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/91&#34;&gt;#91&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/129&#34;&gt;!129&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/09/18/v0.22.0.html</link> <pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/09/18/v0.22.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/09/18/v0.22.0.png" type="image/png" length="55545" /> </item> <item> <title>0.21.0 • $group and string aggregation operators</title> <description>&lt;h1&gt;0.21.0 • $group and string aggregation operators&lt;/h1&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Projections are now represented with booleans instead of integers, for smaller request payloads (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/81&#34;&gt;#81&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/121&#34;&gt;!121&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Aggregation stages:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;$group&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/120&#34;&gt;!120&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Accumulation operators:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;$sum&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/120&#34;&gt;!120&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Aggregation operators:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Added &lt;code&gt;$multiply&lt;/code&gt;, &lt;code&gt;$divide&lt;/code&gt; and &lt;code&gt;$subtract&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/122&#34;&gt;!122&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$trim&lt;/code&gt;, &lt;code&gt;$ltrim&lt;/code&gt; and &lt;code&gt;$rtrim&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/123&#34;&gt;!123&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$toLower&lt;/code&gt; and &lt;code&gt;$toUpper&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/123&#34;&gt;!123&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$substrCP&lt;/code&gt;, &lt;code&gt;$substrBytes&lt;/code&gt;, &lt;code&gt;$strLenCP&lt;/code&gt; and &lt;code&gt;$strLenBytes&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/123&#34;&gt;!123&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$split&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/123&#34;&gt;!123&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;$replaceOne&lt;/code&gt; and &lt;code&gt;$replaceAll&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/123&#34;&gt;!123&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;KotlinX.Serialization 1.9.0&lt;/li&gt; &lt;li&gt;KotlinX.Coroutines 1.10.2&lt;/li&gt; &lt;li&gt;KotlinX.IO 0.8.0&lt;/li&gt; &lt;li&gt;MongoDB Java driver 5.5.1&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/08/24/v0.21.0.html</link> <pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/08/24/v0.21.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/08/24/v0.21.0.png" type="image/png" length="59415" /> </item> <item> <title>0.20.0 • $addToSet, $currentDate and the new documentation website</title> <description>&lt;h1&gt;0.20.0 • $addToSet, $currentDate and the new documentation website&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added support for reading and writing &lt;code&gt;ObjectId&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/110&#34;&gt;!110&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added support for the update operator &lt;code&gt;$addToSet&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/107&#34;&gt;!107&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added support for the update operator &lt;code&gt;$currentDate&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/108&#34;&gt;!108&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Moved the website to https://ktmongo.opensavvy.dev (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/112&#34;&gt;!112&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/113&#34;&gt;!113&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/08/09/v0.20.0.html</link> <pubDate>Sat, 09 Aug 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/08/09/v0.20.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/08/09/v0.20.0.png" type="image/png" length="56740" /> </item> <item> <title>0.20.1 • Fixed documentation website deployment</title> <description>&lt;h1&gt;0.20.1 • Fixed documentation website deployment&lt;/h1&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/08/09/v0.20.1.html</link> <pubDate>Sat, 09 Aug 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/08/09/v0.20.1.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/08/09/v0.20.1.png" type="image/png" length="58124" /> </item> <item> <title>0.19.0 • Pure Kotlin ObjectId and Timestamp, $switch, type aggregation operators, bitwise filter operators, writeConcern and readPreference</title> <description>&lt;h1&gt;0.19.0 • Pure Kotlin ObjectId and Timestamp, $switch, type aggregation operators, bitwise filter operators, writeConcern and readPreference&lt;/h1&gt; &lt;h3&gt;BSON&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Moved &lt;code&gt;ObjectId&lt;/code&gt; to &lt;code&gt;opensavvy.ktmongo.bson.types&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/6e455683&#34;&gt;6e455683&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/80&#34;&gt;!80&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;ObjectIdGenerator&lt;/code&gt; with multiple implementations (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/80&#34;&gt;!80&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;ObjectId.MIN&lt;/code&gt; and &lt;code&gt;ObjectId.MAX&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/80&#34;&gt;!80&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;BsonContext.newId&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/80&#34;&gt;!80&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;BsonReader.readInstant&lt;/code&gt; and &lt;code&gt;BsonWriter.writeInstant&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/244237ed&#34;&gt;244237ed&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/88&#34;&gt;!88&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added &lt;code&gt;opensavvy.ktmongo.bson.types.Timestamp&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/89&#34;&gt;!89&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Changed timestamp APIs from &lt;code&gt;Long&lt;/code&gt; to the new &lt;code&gt;Timestamp&lt;/code&gt; type (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/89&#34;&gt;!89&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (official)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Deleted the old expect class opensavvy.ktmongo.bson.official.types.ObjectId (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/80&#34;&gt;!80&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added a codec for the new ObjectId (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/80&#34;&gt;!80&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;BSON (multiplatform)&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Decreased data copying when reading data (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/417128b5&#34;&gt;417128b5&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/84&#34;&gt;!84&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Removed autoboxing in the implementation of the reader (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/17cab93a&#34;&gt;17cab93a&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/84&#34;&gt;!84&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added no-copy piping of BSON from a reader to a writer (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/86&#34;&gt;!86&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added support for reading and writing &lt;code&gt;BsonType.DateTime&lt;/code&gt; as &lt;code&gt;kotlin.time.Instant&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/e15001f4&#34;&gt;e15001f4&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/88&#34;&gt;!88&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added support for reading and writing &lt;code&gt;BsonType.RegExp&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/2bb5e544&#34;&gt;2bb5e544&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/88&#34;&gt;!88&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added support for reading and writing &lt;code&gt;BsonType.Timestamp&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/commit/aa3c9a9e&#34;&gt;aa3c9a9e&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/89&#34;&gt;!89&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Official driver&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;code&gt;JvmMongoCollection.find&lt;/code&gt; now returns a &lt;code&gt;JvmMongoIterable&lt;/code&gt; instead of a &lt;code&gt;MongoIterable&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/85&#34;&gt;!85&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;DSL&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added the aggregation operator &lt;code&gt;$switch&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/90&#34;&gt;!90&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added the aggregation operators &lt;code&gt;$type&lt;/code&gt;, &lt;code&gt;$isArray&lt;/code&gt;, &lt;code&gt;$isNumber&lt;/code&gt;, &lt;code&gt;$toBoolean&lt;/code&gt;, &lt;code&gt;$toDate&lt;/code&gt;, &lt;code&gt;$toDouble&lt;/code&gt;, &lt;code&gt;$toInt&lt;/code&gt;, &lt;code&gt;$toLong&lt;/code&gt;, &lt;code&gt;$toObjectId&lt;/code&gt;, &lt;code&gt;$toString&lt;/code&gt; and &lt;code&gt;$toUUID&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/91&#34;&gt;!91&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added the filter operators &lt;code&gt;$bitAllClear&lt;/code&gt;, &lt;code&gt;$bitsAllSet&lt;/code&gt;, &lt;code&gt;$bitsAnyClear&lt;/code&gt; and &lt;code&gt;$bitsAnySet&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/92&#34;&gt;!92&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added the option &lt;code&gt;writeConcern&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/93&#34;&gt;!93&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Added the option &lt;code&gt;readPreference&lt;/code&gt; (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/94&#34;&gt;!94&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Created the &lt;code&gt;Command&lt;/code&gt; interface and reorganized all commands to emit their BSON representation (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/95&#34;&gt;!95&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Documentation&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Added a section on aggregation support to the KMongo migration page (&lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/issues/87&#34;&gt;#87&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/opensavvy/ktmongo/-/merge_requests/103&#34;&gt;!103&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Dependencies&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Kotlin 2.2.0&lt;/li&gt; &lt;/ul&gt;</description> <link>https://ktmongo.opensavvy.dev/news/2025/07/29/v0.19.0.html</link> <pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate> <source url="https://ktmongo.opensavvy.dev/feed_rss_created.xml">OpenSavvy KtMongo</source><guid isPermaLink="true">https://ktmongo.opensavvy.dev/news/2025/07/29/v0.19.0.html</guid> <enclosure url="https://ktmongo.opensavvy.dev/assets/images/social/news/2025/07/29/v0.19.0.png" type="image/png" length="56715" /> </item> </channel> </rss>