<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ricardo Mello on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/ricardo-mello/</link><description>Articles written by Ricardo Mello on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 09 Apr 2026 15:21:05 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/ricardo-mello/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Kotlin App with Spring Boot and MongoDB Search</title><link>https://foojayio.github.io/website/today/building-a-kotlin-app-with-spring-boot-and-mongodb-search/</link><pubDate>Thu, 09 Apr 2026 15:21:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-kotlin-app-with-spring-boot-and-mongodb-search/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/b0dkQYcvBkQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;One of my favorite activities is traveling and exploring the world. You know that feeling of discovering a new place and thinking, &amp;ldquo;How have I not been here before?&amp;rdquo; It&amp;rsquo;s with that sensation that I&amp;rsquo;m always motivated to seek out new places to discover. Often, when searching for a place to stay, we&amp;rsquo;re not entirely sure what we&amp;rsquo;re looking for or what experiences we&amp;rsquo;d like to have. For example, we might want to rent a room in a city with a view of a castle. Finding something like that can seem difficult, right? However, there is a way to search for information accurately using MongoDB Search.&lt;/p&gt;</description></item><item><title>MongoDB Sharding: What to Know Before You Shard a Collection</title><link>https://foojayio.github.io/website/today/mongodb-sharding-what-to-know-before-you-shard/</link><pubDate>Thu, 12 Feb 2026 16:47:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-sharding-what-to-know-before-you-shard/</guid><description>&lt;p&gt;When we think about a system that operates at scale, we are usually talking about an application that needs to serve millions of users. This often happens when an application suddenly becomes popular and usage grows much faster than expected. As more people start using it, the system naturally begins to struggle to keep up with the load.&lt;/p&gt;
&lt;p&gt;More users mean more requests, more data being generated, and more pressure on the database. If nothing is done, bottlenecks start to appear and the overall performance of the system degrades. There are two traditional ways to deal with this problem: vertical scaling and horizontal scaling.&lt;/p&gt;</description></item><item><title>MongoDB 8.0 Migration Guide: What You Need to Know Before Upgrading</title><link>https://foojayio.github.io/website/today/mongodb-8-0-migration-guide-what-you-need-to-know-before-upgrading/</link><pubDate>Thu, 05 Feb 2026 14:56:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-8-0-migration-guide-what-you-need-to-know-before-upgrading/</guid><description>&lt;p&gt;Have you ever wondered why updates and upgrades are so essential for any system? Well, it&amp;rsquo;s no secret: They ensure that systems remain relevant and efficient. With MongoDB, it&amp;rsquo;s no different. Whenever we think about updating, we seek efficiency, security, performance, and other benefits that come with updated systems. However, every update introduces changes that need to be carefully managed. In this article, we will cover some of the new features of MongoDB version 8.0 and highlight the key considerations you should take into account before migrating to this new version.&lt;/p&gt;</description></item><item><title>Beyond Keywords: Hybrid Search With Atlas and Vector Search (Part 3)</title><link>https://foojayio.github.io/website/today/beyond-keywords-hybrid-search-with-atlas-and-vector-search-part-3/</link><pubDate>Thu, 13 Nov 2025 13:56:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-keywords-hybrid-search-with-atlas-and-vector-search-part-3/</guid><description>&lt;p&gt;Bringing together semantic vectors and exact keyword matching with $rankFusion&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve been following along this series, you already know we started by giving our movie search app the ability to understand meaning&amp;mdash;not just keywords&amp;mdash;using semantic search, as discussed in &lt;a href="https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/"&gt;&lt;em&gt;Part 1: Implementing Semantic Search in Java With Spring Data&lt;/em&gt;&lt;/a&gt;
. Then, we made it even smarter by adding filters and optimizing performance with embedding strategies in &lt;a href="https://foojayio.github.io/website/today/beyond-keywords-optimizing-vector-search-with-filters-and-caching-part-2/"&gt;&lt;em&gt;Part 2: Optimizing Vector Search With Filters and Caching&lt;/em&gt;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Modeling Relationships With Hibernate ORM and MongoDB</title><link>https://foojayio.github.io/website/today/modeling-relationships-with-hibernate-orm-and-mongodb/</link><pubDate>Tue, 04 Nov 2025 17:08:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/modeling-relationships-with-hibernate-orm-and-mongodb/</guid><description>&lt;p&gt;In the&lt;a href="https://foojayio.github.io/website/today/getting-started-with-hibernate-orm-and-mongodb/"&gt;previous article&lt;/a&gt;
&amp;mdash;&lt;em&gt;Getting Started With Hibernate ORM and MongoDB&lt;/em&gt;&amp;mdash;we learned how to configure Hibernate to work with MongoDB, create an entity, and perform basic CRUD operations using the familiar Hibernate API.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t read that first part yet, I recommend starting there before continuing. It covers the project setup, dependencies, and the fundamentals that we&amp;rsquo;ll build upon here.&lt;/p&gt;
&lt;p&gt;In this second part, we&amp;rsquo;ll &lt;strong&gt;extend our application&lt;/strong&gt; to model relationships between entities&amp;mdash;introducing a Review entity and linking it to our existing Book class. This will allow us to explore more advanced capabilities of the MongoDB Hibernate integration, including:&lt;/p&gt;</description></item><item><title>Getting Started With Hibernate ORM and MongoDB</title><link>https://foojayio.github.io/website/today/getting-started-with-hibernate-orm-and-mongodb/</link><pubDate>Tue, 04 Nov 2025 17:06:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-hibernate-orm-and-mongodb/</guid><description>&lt;p&gt;For years, &lt;a href="https://hibernate.org/" target="_blank" rel="noopener noreferrer"&gt;Hibernate&lt;/a&gt;
 ORM has been one of the most popular frameworks in the Java ecosystem. It was built to simplify data persistence by letting developers work with Java objects instead of SQL statements, a technique known as &lt;em&gt;object-relational mapping (ORM)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Traditionally, Hibernate ORM has been tightly associated with relational databases like PostgreSQL, MySQL, and Oracle. It manages connections, transactions, and entity state behind the scenes, and even provides &lt;strong&gt;Hibernate Query Language (HQL)&lt;/strong&gt; so you can query your data using Java entity names rather than table names.&lt;/p&gt;</description></item><item><title>Beyond Keywords: Optimizing Vector Search with Filters and Caching (Part 2)</title><link>https://foojayio.github.io/website/today/beyond-keywords-optimizing-vector-search-with-filters-and-caching-part-2/</link><pubDate>Thu, 23 Oct 2025 15:44:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-keywords-optimizing-vector-search-with-filters-and-caching-part-2/</guid><description>&lt;p&gt;Enhancing precision with pre-filters and reducing costs with embedding caching&lt;/p&gt;
&lt;p&gt;Welcome back! If you landed here without reading &lt;a href="https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/"&gt;&lt;em&gt;Part 1: Beyond Keywords: Implementing Semantic Search in Java With Spring Data&lt;/em&gt;&lt;/a&gt;
, I recommend going back and checking it first so the steps in this article make more sense in sequence.&lt;/p&gt;
&lt;p&gt;This is the second part of a &lt;strong&gt;three-part series&lt;/strong&gt; where we&amp;rsquo;re building a movie search application. So far, our app supports &lt;strong&gt;semantic search&lt;/strong&gt; using vector queries with Spring Data and Voyage AI. In this article, we&amp;rsquo;ll take things further:&lt;/p&gt;</description></item><item><title>Beyond Keywords: Implementing Semantic Search in Java With Spring Data (Part 1)</title><link>https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/</link><pubDate>Thu, 16 Oct 2025 13:39:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1/</guid><description>&lt;p&gt;Building a semantic movie search app with embeddings and vector queries&lt;/p&gt;
&lt;p&gt;Have you ever tried to search for something such as a product, a song, or a movie but couldn&amp;rsquo;t quite remember its exact name? Maybe you recall only a clue&amp;mdash;a desert pyramid, a short melody, or &amp;ldquo;that ship that hit an iceberg.&amp;rdquo; Keyword search struggles with that. Vector search doesn&amp;rsquo;t: It lets you search by meaning.&lt;/p&gt;
&lt;p&gt;It works by turning text into embeddings, vectors (arrays of numbers) that capture semantic similarity, so results are ranked by what they mean, not just what they say.&lt;/p&gt;</description></item><item><title>Copy of Queryable Encryption with Spring Data MongoDB: How to Query Encrypted Fields</title><link>https://foojayio.github.io/website/today/queryable-encryption-with-spring-data-mongodb-how-to-query-encrypted-fields/</link><pubDate>Tue, 02 Sep 2025 19:00:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/queryable-encryption-with-spring-data-mongodb-how-to-query-encrypted-fields/</guid><description>&lt;p&gt;Information is one of the most valuable assets in computing and keeping it protected is even more critical. When we talk about data protection, it&amp;rsquo;s not just about preventing breaches or leaks; it&amp;rsquo;s also about complying with privacy regulations and protecting user data.&lt;/p&gt;
&lt;p&gt;MongoDB provides strong encryption capabilities, including in transit, at rest, and in use. The Queryable Encryption feature falls into the &lt;em&gt;in use&lt;/em&gt; category. It allows data to be encrypted on the client side, so that even with access to the database and its credentials, no one can read the protected fields without the proper encryption key. At the same time, it supports querying over encrypted fields, making it possible to filter, match, or retrieve data without compromising confidentiality.&lt;/p&gt;</description></item><item><title>Why Mirroring Production in Dev Helps You Avoid Costly Mistakes</title><link>https://foojayio.github.io/website/today/why-mirroring-production-in-dev-helps-you-avoid-costly-mistakes/</link><pubDate>Mon, 28 Jul 2025 13:31:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-mirroring-production-in-dev-helps-you-avoid-costly-mistakes/</guid><description>&lt;p&gt;&lt;strong&gt;Many developers start building their applications with MongoDB using a free M0 cluster or a local environment. While this is common and convenient, it can lead to issues that could easily be avoided by using a more robust setup, such as a development cluster that closely mirrors production. Problems like inefficient queries, missing indexes, or even costly mistakes often go unnoticed in limited environments like M0 or local setups.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll explore why your development environment should closely reflect your production environment, and how using an M10+ cluster with tools like Query Profiler and Performance Advisor can help you catch performance issues early and build with confidence.&lt;/p&gt;</description></item><item><title>Clean and Modular Java: A Hexagonal Architecture Approach</title><link>https://foojayio.github.io/website/today/clean-and-modular-java-a-hexagonal-architecture-approach/</link><pubDate>Tue, 24 Jun 2025 08:03:50 +0000</pubDate><guid>https://foojayio.github.io/website/today/clean-and-modular-java-a-hexagonal-architecture-approach/</guid><description>&lt;p&gt;One of the discussions that always leaves me with both doubts and excitement is the one about system architecture. Ever since I started diving deeper into programming, I&amp;rsquo;ve encountered questions like how to separate packages and modules: is it really worth creating so many divisions? I must admit, it&amp;rsquo;s often complicated to understand or make decisions without being fully sure that I&amp;rsquo;m doing the right thing.&lt;/p&gt;
&lt;p&gt;Right from the start, I want to make it clear that this content will definitely spark a lot of discussion around best practices and whether what I&amp;rsquo;m doing is correct &amp;mdash; but, above all, I guarantee it will be fun!&lt;/p&gt;</description></item><item><title>MongoDB Aggregation Framework: A Beginner’s Guide</title><link>https://foojayio.github.io/website/today/mongodb-aggregation-framework-a-beginners-guide/</link><pubDate>Thu, 05 Jun 2025 06:20:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/mongodb-aggregation-framework-a-beginners-guide/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/CbYitR4mR6I?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Finding exactly the data we need isn&amp;rsquo;t always a simple task.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ve probably faced situations where you needed to filter information, group it, and even perform calculations to produce a final result.&lt;/p&gt;
&lt;p&gt;And often, delivering this processed data to the client is essential for the application&amp;rsquo;s success. MongoDB offers two main ways to fetch data:&lt;/p&gt;</description></item></channel></rss>