<?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>DEV Community: Roxana-Maria Haidiner</title>
    <description>The latest articles on DEV Community by Roxana-Maria Haidiner (@roxana_haidiner).</description>
    <link>https://dev.to/roxana_haidiner</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2224346%2Ff71cca7a-b282-4793-a3ae-b04d89957d47.png</url>
      <title>DEV Community: Roxana-Maria Haidiner</title>
      <link>https://dev.to/roxana_haidiner</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roxana_haidiner"/>
    <language>en</language>
    <item>
      <title>Open a SQLite database in VisuaLeaf and explore it step by step: browse tables, query and join records, read JSON values, export results to Excel, and create charts.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Wed, 14 Oct 2026 17:42:13 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/open-a-sqlite-database-in-visualeaf-and-explore-it-step-by-step-browse-tables-query-and-join-148d</link>
      <guid>https://dev.to/roxana_haidiner/open-a-sqlite-database-in-visualeaf-and-explore-it-step-by-step-browse-tables-query-and-join-148d</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/how-to-open-a-sqlite-database-query-and-explore-your-data-275d" class="crayons-story__hidden-navigation-link"&gt;How to Open a SQLite Database: Query and Explore Your Data&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
                
              
              &lt;div id="story-author-preview-content-4851544" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-open-a-sqlite-database-query-and-explore-your-data-275d" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/how-to-open-a-sqlite-database-query-and-explore-your-data-275d" id="article-link-4851544"&gt;
          How to Open a SQLite Database: Query and Explore Your Data
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sql&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sqlite"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sqlite&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwaredevelopment"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwaredevelopment&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-open-a-sqlite-database-query-and-explore-your-data-275d" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/how-to-open-a-sqlite-database-query-and-explore-your-data-275d#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            9 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>What's New in MongoDB 9.0: Query Settings, Validation, and Resource Limits</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Wed, 14 Oct 2026 17:41:15 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/whats-new-in-mongodb-90-query-settings-validation-and-resource-limits-h1k</link>
      <guid>https://dev.to/roxana_haidiner/whats-new-in-mongodb-90-query-settings-validation-and-resource-limits-h1k</guid>
      <description>&lt;p&gt;A new database release is easier to understand when you run the same command on the old and new versions. Does it accept an option that was previously rejected? Does it enforce a rule differently? Can you complete a task that previously needed a workaround?&lt;/p&gt;

&lt;p&gt;For this article, I used MongoDB 9.0.2 in Docker and kept my MongoDB 8.2.5 instance available for comparison. I connected to both through &lt;a href="https://visualeaf.com" rel="noopener noreferrer"&gt;VisuaLeaf&lt;/a&gt; and used a streaming-platform dataset for the query examples.&lt;/p&gt;

&lt;p&gt;This article covers the following changes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Before 9.0&lt;/th&gt;
&lt;th&gt;What changed&lt;/th&gt;
&lt;th&gt;Useful example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Query settings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Query settings were stored for matching query shapes.&lt;/td&gt;
&lt;td&gt;Pass settings directly to one command.&lt;/td&gt;
&lt;td&gt;Try an index choice for one execution, then inspect the Explain plan.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Constraint validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adding strict validation did not check existing documents retroactively.&lt;/td&gt;
&lt;td&gt;Upgrading to &lt;code&gt;constraint&lt;/code&gt; checks existing data against the validator.&lt;/td&gt;
&lt;td&gt;Enforce valid subscription plans, prices, and currencies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Query timeout&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Timeouts could be supplied with individual commands.&lt;/td&gt;
&lt;td&gt;Store a timeout for matching query shapes.&lt;/td&gt;
&lt;td&gt;Put a time budget on a recurring reporting query.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory limit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Queries had individual stage limits, but no overall query memory cap.&lt;/td&gt;
&lt;td&gt;An overall memory limit applies to a query operation.&lt;/td&gt;
&lt;td&gt;Inspect the configured limit and memory-limit failure counter.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time-series rename&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;renameCollection&lt;/code&gt; did not support time-series collections.&lt;/td&gt;
&lt;td&gt;Rename a time-series collection directly.&lt;/td&gt;
&lt;td&gt;Rename playback metrics and verify the settings and documents.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Reported performance improvements
&lt;/h3&gt;

&lt;p&gt;MongoDB reports the following improvements in its &lt;a href="https://www.mongodb.com/company/blog/product-release-announcements/ai-demand-constant-unpredictable-extreme-mongodb-is-built-for-it" rel="noopener noreferrer"&gt;internal benchmarks&lt;/a&gt; comparing 9.0 with 8.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Up to *&lt;strong&gt;&lt;em&gt;35% faster find-one queries&lt;/em&gt;&lt;/strong&gt;*.&lt;/li&gt;
&lt;li&gt;Up to *&lt;strong&gt;&lt;em&gt;30% faster update-one queries&lt;/em&gt;&lt;/strong&gt;*.&lt;/li&gt;
&lt;li&gt;Up to *&lt;strong&gt;&lt;em&gt;20% higher throughput for transactional workloads&lt;/em&gt;&lt;/strong&gt;*.&lt;/li&gt;
&lt;li&gt;Up to *&lt;strong&gt;&lt;em&gt;2× throughput on large instances&lt;/em&gt;&lt;/strong&gt;*.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Results vary by workload, hardware, deployment, and configuration. My local tests below explore feature behavior; they do not measure these performance gains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect to the test instance
&lt;/h2&gt;

&lt;p&gt;I used a separate Docker container and data volume for the test. The original database stayed available on port &lt;code&gt;27017&lt;/code&gt;, while the test instance used port &lt;code&gt;27021&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In VisuaLeaf, I created a connection named *&lt;strong&gt;&lt;em&gt;MongoDB 9.0 Test&lt;/em&gt;&lt;/strong&gt;*, with host &lt;code&gt;127.0.0.1&lt;/code&gt; and port &lt;code&gt;27021&lt;/code&gt;. This local test instance had authentication disabled. Use the authentication settings configured for your own server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xafdx4axfp8fvjul2h6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xafdx4axfp8fvjul2h6.png" alt="VisuaLeaf connection settings for a local MongoDB 9.0 test instance at localhost:27021." width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connecting to the local MongoDB 9.0 test instance in VisuaLeaf.&lt;/p&gt;

&lt;p&gt;Before running the examples, I checked the server version and feature compatibility version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.version()

db.adminCommand({
  getParameter: 1,
  featureCompatibilityVersion: 1
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server returned &lt;code&gt;9.0.2&lt;/code&gt; and feature compatibility version &lt;code&gt;9.0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I also restored a BSON dump through &lt;a href="https://visualeaf.com/blog/mongodump-tasks-automate-and-schedule-mongodb-backups/" rel="noopener noreferrer"&gt;VisuaLeaf's Task Manager.&lt;/a&gt; The restore job completed, and the streaming-platform database was available for the query tests. Restoring data is part of the test setup, rather than a new MongoDB 9.0 feature.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2jfmd900i6375e5anoof.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2jfmd900i6375e5anoof.png" alt="VisuaLeaf BSON restore task targeting streaming_platform_db on MongoDB 9.0, with eight collections and a 23.92 MB dump." width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restoring a BSON dump to the MongoDB 9.0 test database using a VisuaLeaf task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try an index choice for one query
&lt;/h2&gt;

&lt;p&gt;Let's suppose you want to check how a reporting query behaves with a particular index. You want to inspect that execution before deciding whether to apply a setting more broadly.&lt;/p&gt;

&lt;p&gt;MongoDB 9.0 accepts &lt;code&gt;querySettings&lt;/code&gt; directly in &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;distinct&lt;/code&gt;, and &lt;code&gt;aggregate&lt;/code&gt; commands. These settings apply to that execution and are not saved for future matching queries. Existing stored settings take precedence when both specify the same field.&lt;/p&gt;

&lt;p&gt;For the first test, I queried paid payments in EUR with an amount of at least 10, sorted by payment date. The command allowed MongoDB to use the existing &lt;code&gt;status_1&lt;/code&gt; index:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getSiblingDB("streaming_platform_db").runCommand({
  find: "payments",
  filter: {
    status: "paid",
    currency: "EUR",
    amount: { $gte: 10 }
  },
  sort: { paid_at: -1 },
  limit: 5,
  singleBatch: true,
  querySettings: {
    indexHints: {
      ns: { db: "streaming_platform_db", coll: "payments" },
      allowedIndexes: ["status_1"]
    }
  }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On MongoDB 9.0.2, the command returned &lt;code&gt;ok: 1&lt;/code&gt; and five documents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd8asbzq1p1dhn52h8lfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd8asbzq1p1dhn52h8lfm.png" width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On 8.2.5, it failed because the command did not recognize the &lt;code&gt;querySettings&lt;/code&gt; field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft699bqfl6jm49iajdn75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft699bqfl6jm49iajdn75.png" alt="VisuaLeaf shell running a find command on MongoDB 8.2.5 and displaying an unknown-field error for querySettings." width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MongoDB 8.2.5 rejects &lt;code&gt;querySettings&lt;/code&gt; passed directly to a find command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://visualeaf.com/features/query-profiler/" rel="noopener noreferrer"&gt;To check the index selection&lt;/a&gt;, I wrapped the same find command in &lt;code&gt;explain&lt;/code&gt; and requested &lt;code&gt;executionStats&lt;/code&gt;. &lt;a href="https://visualeaf.com/features/query-profiler/" rel="noopener noreferrer"&gt;VisuaLeaf displayed an &lt;code&gt;IXSCAN&lt;/code&gt;&lt;/a&gt; using &lt;code&gt;status_1&lt;/code&gt;, followed by &lt;code&gt;FETCH&lt;/code&gt; and &lt;code&gt;SORT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The separate sort made sense: &lt;code&gt;status_1&lt;/code&gt; indexes the payment status, not the payment date. MongoDB examined roughly 5,900 keys and documents to return five results. This confirmed the index choice, but it did not establish that this was the best index for the query.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkze7627jk43l332szxwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkze7627jk43l332szxwf.png" alt="VisuaLeaf Explain view showing IXSCAN on the status_1 index, FETCH, and SORT for the MongoDB 9.0 payments query." width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Explain plan shows an index scan using &lt;code&gt;status_1&lt;/code&gt;, followed by FETCH and SORT.&lt;/p&gt;

&lt;p&gt;The useful part is being able to test a choice and inspect its consequences. A successful command alone does not tell you whether the query is efficient.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use the same option in an aggregation
&lt;/h3&gt;

&lt;p&gt;I also tested a &lt;a href="https://visualeaf.com/blog/aggregation-pipeline-in-mongodb-a-practical-guide-for-developers/" rel="noopener noreferrer"&gt;five-stage aggregation&lt;/a&gt;: filter the payments, group by plan and payment method, calculate revenue, sort the groups, and return the top ten.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0pgzbui8sqaov8j3vxja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0pgzbui8sqaov8j3vxja.png" alt="VisuaLeaf shell displaying an aggregation with per-command query settings and eight result groups for subscription plans and payment methods." width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aggregation results on MongoDB 9.0, showing revenue and payment counts by subscription plan and payment method.&lt;/p&gt;

&lt;p&gt;The 9.0.2 command returned eight groups. The family/card group contained 194 payments, with an average of EUR 14.99 and total revenue of EUR 2,908.06. The family/Apple Pay group contained 193 payments and EUR 2,893.07 in revenue.&lt;/p&gt;

&lt;p&gt;The pipeline stages themselves work in older MongoDB versions. The change demonstrated here is the command-level &lt;code&gt;querySettings&lt;/code&gt; option.&lt;/p&gt;

&lt;h2&gt;
  
  
  MongoDB 9.0: The new constraint validation level
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://visualeaf.com/blog/mongodb-json-schema-validation/" rel="noopener noreferrer"&gt;Schema validation&lt;/a&gt; already existed before MongoDB 9.0. You could require fields, restrict values, and reject invalid inserts or updates.&lt;/p&gt;

&lt;p&gt;The new &lt;code&gt;constraint&lt;/code&gt; level addresses existing data too. Adding &lt;code&gt;strict&lt;/code&gt; validation does not retroactively check old documents. Upgrading an existing collection to &lt;code&gt;constraint&lt;/code&gt; scans them and fails if any violate the validator.&lt;/p&gt;

&lt;p&gt;For the test, I created &lt;code&gt;mongodb9_checks.validated_plans&lt;/code&gt; with three requirements: a supported plan, a non-negative double price, and EUR currency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getSiblingDB("mongodb9_checks").createCollection(
  "validated_plans",
  {
    validator: {
      $jsonSchema: {
        bsonType: "object",
        required: ["plan", "monthlyPrice", "currency"],
        properties: {
          plan: { enum: ["basic", "premium", "family"] },
          monthlyPrice: { bsonType: "double", minimum: 0 },
          currency: { enum: ["EUR"] }
        }
      }
    },
    validationLevel: "constraint",
    validationAction: "error"
  }
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3xd8mzkh8op3sb72l371.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3xd8mzkh8op3sb72l371.png" alt="Creating validated_plans with constraint validation in MongoDB 9.0 returns ok: 1." width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating &lt;code&gt;validated_plans&lt;/code&gt; with constraint validation in MongoDB 9.0 returns &lt;code&gt;ok: 1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Creating a new collection with this level is straightforward. An existing collection needs MongoDB’s preparation procedure before upgrading.&lt;/p&gt;

&lt;p&gt;A valid document looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ plan: "family", monthlyPrice: 14.99, currency: "EUR" }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A negative price would fail validation under either &lt;code&gt;strict&lt;/code&gt; or &lt;code&gt;constraint&lt;/code&gt;. The difference concerns documents already stored: &lt;code&gt;strict&lt;/code&gt; can leave old invalid documents in place, while upgrading to &lt;code&gt;constraint&lt;/code&gt; cannot succeed until they satisfy the validator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect the rules in Schema Manager
&lt;/h3&gt;

&lt;p&gt;I opened &lt;code&gt;validated_plans&lt;/code&gt; in &lt;a href="https://visualeaf.com/features/schema-validation/" rel="noopener noreferrer"&gt;VisuaLeaf’s Schema Manager&lt;/a&gt; to inspect the saved validator. It displays the plan and currency enums, the price minimum, the required fields, and the active &lt;code&gt;constraint&lt;/code&gt; level.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0bgix4vo1iqlizgwtejv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0bgix4vo1iqlizgwtejv.png" alt="VisuaLeaf Schema Manager showing plan and currency enum rules, a minimum monthly price of zero, and constraint validation for validated_plans." width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspecting the subscription validation rules and active constraint level in VisuaLeaf’s Schema Manager.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change the rules after leaving constraint mode
&lt;/h3&gt;

&lt;p&gt;I also tried changing the validator with &lt;code&gt;collMod&lt;/code&gt; while &lt;code&gt;constraint&lt;/code&gt; was active. MongoDB rejected the command, and &lt;a href="https://visualeaf.com/features/mongo-shell/" rel="noopener noreferrer"&gt;VisuaLeaf displayed&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Validator cannot be changed when Validation level is 'constraint'.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ppnwzx1hft8t2yejm4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ppnwzx1hft8t2yejm4v.png" alt="VisuaLeaf shell showing a collMod command for validated_plans and the error “Validator cannot be changed when Validation level is 'constraint'.”" width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MongoDB rejects a validator change through &lt;code&gt;collMod&lt;/code&gt; while constraint validation is active.&lt;/p&gt;

&lt;p&gt;To change the rules, first switch the collection to &lt;code&gt;strict&lt;/code&gt; and apply that change separately. Then update the validator. Before returning to &lt;code&gt;constraint&lt;/code&gt;, prepare the collection again; the upgrade will fail if any existing documents violate the updated rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set a timeout for a recurring query
&lt;/h2&gt;

&lt;p&gt;Before 9.0, you could pass &lt;code&gt;maxTimeMS&lt;/code&gt; with an individual query. You can now save a timeout for a query shape, the query’s structure, so it applies to matching queries even when filter values change. The stored timeout takes precedence over one supplied in the command.&lt;/p&gt;

&lt;p&gt;This gives a recurring payment report a shared time limit without every caller adding it. It stops queries that exceed the limit; it does not make them faster.&lt;/p&gt;

&lt;p&gt;Stored query settings require a replica set or sharded cluster. I used a single-node Docker replica set named &lt;code&gt;rs9&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I saved a 1 ms timeout for this payment report. This deliberately small limit demonstrates enforcement; for a real report, choose a timeout based on its normal execution time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2eyui784mkiog79x35y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2eyui784mkiog79x35y.png" alt="VisuaLeaf shell showing setQuerySettings and a successful response with ok: 1, a query shape hash, and maxTimeMS set to 1." width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saving a 1 ms timeout for the payment report’s query shape in MongoDB 9.0&lt;/p&gt;

&lt;p&gt;Matching query shapes can involve very different amounts of work. A report for one day and a report for a full year may inherit the same timeout. Before choosing a shared budget, test several realistic filter values and compare execution times, documents examined, and how often requests complete within the limit. When investigating unexpected timeouts, check both the stored setting and the command’s maxTimeMS: the stored value takes precedence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run the report without adding a timeout
&lt;/h3&gt;

&lt;p&gt;I then ran the matching aggregation with no &lt;code&gt;maxTimeMS&lt;/code&gt; in the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getSiblingDB("streaming_platform_db").payments.aggregate([
  { $match: { status: "paid", currency: "EUR" } },
  { $group: {
    _id: "$subscription_plan",
    totalRevenue: { $sum: "$amount" },
    paymentCount: { $sum: 1 }
  } },
  { $sort: { totalRevenue: -1 } }
]).toArray()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MongoDB stopped the operation, and VisuaLeaf displayed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;operation exceeded time limit&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The report inherited the stored budget from its matching query shape.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmmgg18yq23uv26vsb5fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmmgg18yq23uv26vsb5fz.png" alt="VisuaLeaf shell showing the payment aggregation without maxTimeMS and the error “operation exceeded time limit.”" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The payment report exceeds the stored 1 ms timeout, even without &lt;code&gt;maxTimeMS&lt;/code&gt; in the command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remove the setting and rerun the same report
&lt;/h3&gt;

&lt;p&gt;After capturing the error, I removed the test setting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.adminCommand({
  removeQuerySettings: {
    aggregate: "payments",
    pipeline: [
      { $match: { status: "paid", currency: "EUR" } },
      { $group: {
        _id: "$subscription_plan",
        totalRevenue: { $sum: "$amount" },
        paymentCount: { $sum: 1 }
      } },
      { $sort: { totalRevenue: -1 } }
    ],
    cursor: {},
    $db: "streaming_platform_db"
  }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After removing the setting, I reran the same aggregation, and it returned the revenue result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd7l5ugrq9mscpgx1yadi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd7l5ugrq9mscpgx1yadi.png" alt="VisuaLeaf shell displaying payment report results grouped by subscription plan after removing the query shape timeout." width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same payment report completes successfully after removing the stored timeout.&lt;/p&gt;

&lt;p&gt;The report did not change between executions. The stored time budget changed whether it could complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect the overall query memory limit
&lt;/h2&gt;

&lt;p&gt;MongoDB 9.0 adds a total memory limit for a query operation. Its default is the greater of 1 GB or 20% of the memory available to the server process. The existing 100 MB per-stage limit and stage spill behavior remain unchanged.&lt;/p&gt;

&lt;p&gt;I inspected two server metrics &lt;a href="https://visualeaf.com/features/split-panel-views/" rel="noopener noreferrer"&gt;through VisuaLeaf&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var queryMetrics = db.getSiblingDB("admin")
  .runCommand({ serverStatus: 1 }).metrics.query;

({
  memoryLimitBytes:
    queryMetrics.configuredMaxMemoryUsageBytesPerOperation,
  operationsFailedDueToMemoryLimit:
    queryMetrics.operationsFailedDueToMemoryLimit
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;MongoDB 9.0.2&lt;/th&gt;
&lt;th&gt;MongoDB 8.2.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Configured limit&lt;/td&gt;
&lt;td&gt;1,608,660,582 bytes, approximately 1.50 GiB&lt;/td&gt;
&lt;td&gt;Metric unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operations rejected for exceeding the limit&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Metric unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;VisuaLeaf displayed the unavailable values on 8.2.5 as &lt;code&gt;Null&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjys61n9gj1afq7ajxgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjys61n9gj1afq7ajxgp.png" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is useful when investigating expensive reports or aggregations: you can see the configured cap and whether operations have hit it. The number belongs to this Docker setup, so do not expect every server to report the same limit.&lt;/p&gt;

&lt;p&gt;This test checked the metrics. It did not deliberately run a query that exceeded the cap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rename a time-series collection without rebuilding it
&lt;/h2&gt;

&lt;p&gt;MongoDB 9.0 adds support for renaming time-series collections with &lt;code&gt;renameCollection&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I tested this with a small playback metrics collection. It used &lt;code&gt;recorded_at&lt;/code&gt; as its time field, &lt;code&gt;metadata&lt;/code&gt; as its meta field, and &lt;code&gt;minutes&lt;/code&gt; granularity. The two documents recorded active stream counts and buffering rates for smart TVs in the EU.&lt;/p&gt;

&lt;p&gt;The rename command was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getSiblingDB("admin").runCommand({
  renameCollection: "mongodb9_checks.playback_metrics",
  to: "mongodb9_checks.streaming_metrics"
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After renaming it, I checked both the collection settings and its documents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getSiblingDB("mongodb9_checks")
  .getCollectionInfos({ name: "streaming_metrics" })

db.getSiblingDB("mongodb9_checks")
  .streaming_metrics.find().toArray()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The collection still reported type &lt;code&gt;timeseries&lt;/code&gt; with the same time field, meta field, and granularity. Both documents remained: 1,250 and 1,320 active streams, with buffering rates of 0.8 and 0.6. VisuaLeaf also identified the collection with its TS badge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlh7b5xztcfad5lze4vp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlh7b5xztcfad5lze4vp.png" alt="VisuaLeaf showing the renamed streaming_metrics time-series collection, with its original time-series settings above the two preserved documents." width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Renaming the time-series collection preserves its settings and both documents in MongoDB 9.0.&lt;/p&gt;

&lt;p&gt;This is useful when a collection name no longer describes its purpose. Here, you can rename the collection, and follow-up checks confirmed that its settings and data remained available.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other MongoDB 9.0 changes
&lt;/h3&gt;

&lt;p&gt;MongoDB 9.0 also expands query monitoring and encrypted searches. &lt;code&gt;$queryStats&lt;/code&gt; collects statistics for both reads and writes by default, sampling 1% of operations.  &lt;/p&gt;

&lt;p&gt;Queryable Encryption now supports generally available prefix, suffix, and substring searches on encrypted strings. These features weren’t part of my local tests, but they are worth exploring for workload monitoring and applications that need searchable encrypted data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which changes are worth trying first?
&lt;/h2&gt;

&lt;p&gt;If you troubleshoot queries, start with per-command query settings and inspect the Explain plan. If you need a guarantee about existing data, look at constraint validation. For reporting workloads, the timeout and memory controls are useful additions to understand. Time-series rename solves a smaller but concrete maintenance task.&lt;/p&gt;

&lt;p&gt;These tests used MongoDB 9.0.2, feature compatibility version set to 9.0, and VisuaLeaf 1.0.2432 on a local Docker deployment. They demonstrate specific commands and results, not a performance benchmark or full compatibility certification.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Before upgrading a production deployment, review MongoDB’s compatibility changes and known issues for your target patch version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/manual/release-notes/9.0/" rel="noopener noreferrer"&gt;MongoDB 9.0 release notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/manual/core/schema-validation/specify-validation-level/" rel="noopener noreferrer"&gt;Specify validation level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/manual/reference/command/setquerysettings/" rel="noopener noreferrer"&gt;setQuerySettings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/manual/reference/limits/" rel="noopener noreferrer"&gt;MongoDB limits and thresholds&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mongodb</category>
      <category>nosql</category>
      <category>database</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>MongoDB Sharding: Manage a Sharded Cluster Visually</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Fri, 18 Sep 2026 06:34:08 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/mongodb-sharding-manage-a-sharded-cluster-visually-1nkc</link>
      <guid>https://dev.to/roxana_haidiner/mongodb-sharding-manage-a-sharded-cluster-visually-1nkc</guid>
      <description>&lt;p&gt;MongoDB sharding helps a database handle growth by dividing a large collection into smaller blocks called &lt;strong&gt;chunks&lt;/strong&gt; and distributing them across multiple &lt;strong&gt;shards&lt;/strong&gt;. A &lt;strong&gt;shard key&lt;/strong&gt;, such as &lt;code&gt;customerId&lt;/code&gt; or &lt;code&gt;region&lt;/code&gt;, determines how the documents are divided.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll show you how to connect an existing MongoDB sharded cluster to &lt;a href="https://visualeaf.com" rel="noopener noreferrer"&gt;VisuaLeaf&lt;/a&gt; and manage it visually. You’ll see where your data is stored, how it is distributed, whether the balancer is running, and how to review or change the shard key.&lt;/p&gt;

&lt;p&gt;For this example, I used a 405 MB &lt;code&gt;orders&lt;/code&gt; collection distributed across two shards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3oj4k42fp5het7h062x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3oj4k42fp5het7h062x.png" alt="MongoDB sharding dashboard showing a 405 MB orders collection distributed across two shards" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How a MongoDB sharded cluster is organized
&lt;/h2&gt;

&lt;p&gt;A MongoDB sharded cluster has three core components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shards&lt;/strong&gt; store subsets of the data. Each production shard should be a replica set.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;**mongos**&lt;/code&gt; is the query router used by applications and database clients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config servers&lt;/strong&gt; store the cluster metadata and configuration.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MongoDB divides sharded collections into chunks according to a &lt;strong&gt;shard key&lt;/strong&gt;. The balancer can move those chunks between shards when MongoDB detects enough difference in data distribution.&lt;/p&gt;

&lt;p&gt;MongoDB explains these roles in its documentation for &lt;a href="https://www.mongodb.com/docs/manual/core/sharded-cluster-components/" rel="noopener noreferrer"&gt;sharded cluster components&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The important connection detail is &lt;code&gt;mongos&lt;/code&gt;. To see and manage the complete cluster, connect VisuaLeaf to a &lt;code&gt;mongos&lt;/code&gt; endpoint, not directly to an individual shard or config server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect VisuaLeaf to an existing MongoDB sharded cluster
&lt;/h2&gt;

&lt;p&gt;For my local test, &lt;code&gt;mongos&lt;/code&gt; was exposed on port &lt;code&gt;27020&lt;/code&gt;, so I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongodb://127.0.0.1:27020
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a remote environment, use its real &lt;code&gt;mongos&lt;/code&gt; hostname, authentication, TLS settings, and required connection options. Do not expose credentials in screenshots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7x6f6dh9cxx9ytw62qz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7x6f6dh9cxx9ytw62qz9.png" alt="Configure an existing MongoDB sharded cluster connection in VisuaLeaf" width="800" height="797"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the connection is active:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Right-click the MongoDB connection.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Sharding&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This opens the sharding controls for the complete cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check shards, collections, and cluster health
&lt;/h2&gt;

&lt;p&gt;The dashboard immediately identifies the connection as a sharded topology. Its overview includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shard names and hosts&lt;/li&gt;
&lt;li&gt;Health status for every shard&lt;/li&gt;
&lt;li&gt;Chunk counts&lt;/li&gt;
&lt;li&gt;Sharded collections and their shard keys&lt;/li&gt;
&lt;li&gt;Databases with sharding enabled&lt;/li&gt;
&lt;li&gt;Global balancer status&lt;/li&gt;
&lt;li&gt;Zone assignments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the test cluster, &lt;code&gt;shard1RS&lt;/code&gt; and &lt;code&gt;shard2RS&lt;/code&gt; both reported &lt;strong&gt;OK&lt;/strong&gt;. The application collection appeared as &lt;code&gt;ecommerce_demo.orders&lt;/code&gt;, with &lt;code&gt;{ customerId: "hashed" }&lt;/code&gt; shown directly beside it.&lt;/p&gt;

&lt;p&gt;The dashboard also listed &lt;code&gt;config.system.sessions&lt;/code&gt;. That is an internal MongoDB collection, not part of the ecommerce application. This distinction matters when using collection-level actions: select &lt;code&gt;ecommerce_demo.orders&lt;/code&gt;, not the system collection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect MongoDB chunk distribution
&lt;/h2&gt;

&lt;p&gt;Expand &lt;code&gt;ecommerce_demo.orders&lt;/code&gt; to see how the collection is distributed. VisuaLeaf shows the following values for each shard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chunks&lt;/li&gt;
&lt;li&gt;Documents&lt;/li&gt;
&lt;li&gt;Logical data size&lt;/li&gt;
&lt;li&gt;Average document size&lt;/li&gt;
&lt;li&gt;Jumbo chunks&lt;/li&gt;
&lt;li&gt;Individual shard-key ranges&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also adds a visual distribution bar, which makes a large imbalance easier to notice than a block of shell output.&lt;/p&gt;

&lt;p&gt;The original test contained 50,000 documents and about 14 MB of data. That was enough to verify the connection, but not a convincing example of a large collection. After adding more sample orders, the logical size reached approximately 405 MB.&lt;/p&gt;

&lt;p&gt;The collection uses a hashed &lt;code&gt;customerId&lt;/code&gt; shard key. Hashed sharding supports more even distribution because MongoDB distributes hashed values instead of placing similar source values next to each other. The trade-off is that range queries on the original field can become scatter-gather queries.&lt;/p&gt;

&lt;p&gt;Do not expect both shards to contain the same number of documents. A small difference is normal. The more useful questions are whether the shards are healthy, whether data is distributed reasonably, and whether any chunks are marked jumbo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqbsp3q7x2vd12wxek9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqbsp3q7x2vd12wxek9x.png" alt="MongoDB orders collection distributed across two shards and two chunks" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Control the MongoDB balancer and chunks
&lt;/h2&gt;

&lt;p&gt;The MongoDB balancer runs in the background and moves data when the difference between shards reaches MongoDB's migration thresholds. From the dashboard, you can see its current state, start or stop it, and configure a balancing schedule.&lt;/p&gt;

&lt;p&gt;Collection-level controls are available separately. For &lt;code&gt;ecommerce_demo.orders&lt;/code&gt;, the expanded view shows whether balancing and auto-merge are enabled. It also exposes actions for splitting, merging, and moving chunks.&lt;/p&gt;

&lt;p&gt;These controls run real MongoDB administrative operations. Moving or splitting data can increase network, storage, and replication work, so don't use them just to make the distribution bars look equal. In a healthy cluster, the balancer should handle routine distribution.&lt;/p&gt;

&lt;p&gt;MongoDB advises against leaving the balancer disabled for long periods because an uneven distribution can affect cluster performance. Teams can instead schedule balancing for a quieter period when migrations would have less impact. See MongoDB's &lt;a href="https://www.mongodb.com/docs/manual/core/sharding-balancer-administration/" rel="noopener noreferrer"&gt;balancer documentation&lt;/a&gt; for the current behavior and thresholds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review or change the MongoDB shard key
&lt;/h2&gt;

&lt;p&gt;Collection size alone is not a reason to change a shard key. Resharding becomes useful when the existing key causes hotspots, distributes data unevenly, or does not match the application’s common queries.&lt;/p&gt;

&lt;p&gt;MongoDB recommends checking cardinality, value frequency, monotonic growth, and query patterns when &lt;a href="https://www.mongodb.com/docs/manual/core/sharding-choose-a-shard-key/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;choosing a shard key&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In VisuaLeaf, you can use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shard Key Advisor&lt;/strong&gt; to evaluate possible keys&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;key icon&lt;/strong&gt; beside a collection to open the resharding form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this test, I changed the shard key from &lt;code&gt;{ customerId: "hashed" }&lt;/code&gt; to &lt;code&gt;{ orderId: "hashed" }&lt;/code&gt;. The form generated the MongoDB command before I ran it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7tpgxb8mue4zxbokytv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7tpgxb8mue4zxbokytv1.png" alt="Configure orderId as a new hashed MongoDB shard key in VisuaLeaf" width="800" height="856"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After starting the operation, VisuaLeaf displayed its progress directly in the sharding dashboard. MongoDB created a temporary &lt;code&gt;system.resharding...&lt;/code&gt; collection and copied all 215,000 documents using the new shard key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi64xtxj400dscp7zbc3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi64xtxj400dscp7zbc3n.png" alt="MongoDB resharding progress while copying 215,000 documents to a new shard key" width="800" height="647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the operation finishes, the temporary collection disappears and &lt;code&gt;ecommerce_demo.orders&lt;/code&gt; displays &lt;code&gt;{ orderId: "hashed" }&lt;/code&gt; as its shard key.&lt;/p&gt;

&lt;p&gt;Changing a shard key can require significant time and temporary storage on a large production collection. Test the operation first and review MongoDB’s &lt;a href="https://www.mongodb.com/docs/manual/core/sharding-reshard-a-collection/" rel="noopener noreferrer"&gt;resharding requirements&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feytlja5bkkcnswf2zoh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feytlja5bkkcnswf2zoh2.png" alt="MongoDB orders collection using orderId as its hashed shard key after resharding" width="800" height="647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitor the MongoDB cluster during activity
&lt;/h2&gt;

&lt;p&gt;The Sharding dashboard shows where the data lives. System Monitor shows what the connection is doing.&lt;/p&gt;

&lt;p&gt;During the sample-data load, I opened &lt;a href="https://visualeaf.com/docs/system-monitor" rel="noopener noreferrer"&gt;&lt;strong&gt;System Monitor&lt;/strong&gt;&lt;/a&gt; for the sharded connection. It displayed connections, new connection rate, network throughput, and request activity while documents were inserted through &lt;code&gt;mongos&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is useful when testing a load, observing balancing activity, or checking whether an administrative operation corresponds with increased requests or network traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft6zmhcjb55pbks6t5qu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft6zmhcjb55pbks6t5qu0.png" alt="MongoDB System Monitor showing network throughput, request rate, and operations during resharding" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where VisuaLeaf fits
&lt;/h2&gt;

&lt;p&gt;VisuaLeaf works on top of an existing MongoDB sharded cluster. It does not provision shard replica sets, config servers, or &lt;code&gt;mongos&lt;/code&gt; routers.&lt;/p&gt;

&lt;p&gt;Once connected through &lt;code&gt;mongos&lt;/code&gt;, you can visually inspect and manage the cluster—including sharding a collection, controlling the balancer, managing chunks and zones, and changing a shard key. VisuaLeaf simplifies these operations, but decisions about data distribution and shard-key selection still belong to the user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this test, I connected a two-shard MongoDB cluster to VisuaLeaf, checked how a 405 MB collection was distributed, and changed its shard key from &lt;code&gt;customerId&lt;/code&gt; to &lt;code&gt;orderId&lt;/code&gt;. I could follow the entire resharding operation from the same workspace, including its progress and effect on the cluster.&lt;/p&gt;

&lt;p&gt;If you already manage a MongoDB sharded cluster and want a more visual workflow, &lt;a href="https://visualeaf.com/download" rel="noopener noreferrer"&gt;download VisuaLeaf&lt;/a&gt; and connect it to your &lt;code&gt;mongos&lt;/code&gt; endpoint.&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>database</category>
      <category>software</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>How to Use DuckDB for Local Data Analysis</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:11:52 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/how-to-use-duckdb-for-local-data-analysis-1koe</link>
      <guid>https://dev.to/roxana_haidiner/how-to-use-duckdb-for-local-data-analysis-1koe</guid>
      <description>&lt;p&gt;You have data on your computer and want to explore it with SQL. It might be a CSV export, an existing database, or files produced by another analytical tool. Setting up a database server just to answer a few questions adds work before you have learned anything from the data.&lt;/p&gt;

&lt;p&gt;DuckDB offers a simpler option for this kind of local analysis. It runs directly on your computer, stores data in a local file, and lets you query external files without importing everything first.&lt;/p&gt;

&lt;p&gt;This guide follows the workflow we tested on Windows: create a persistent database, open it in a visual client, inspect and edit its data, query CSV and Parquet files, view an ER diagram, and chart the results. It also covers a limitation we found while updating a nested value on a table with a primary key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8a7jp2b4gzigjo43czz0.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8a7jp2b4gzigjo43czz0.webp" alt="DuckDB data and monthly revenue chart displayed in VisuaLeaf Split View" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Browsing Parquet-backed event data beside a monthly revenue chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is DuckDB?
&lt;/h2&gt;

&lt;p&gt;DuckDB is an in-process analytical database. It runs inside the application using it rather than as a separate database server. It is built mainly for analytical queries that scan, filter, join, group, and summarize many rows. These are often called OLAP workloads.&lt;/p&gt;

&lt;p&gt;You can save tables and views in a persistent &lt;code&gt;.duckdb&lt;/code&gt; file, or create an in-memory database for temporary work. A persistent file remains after the application closes. An in-memory database disappears when the process ends. In a normal local setup, there is no host, port, username, or password to configure. You open a file path and start working with SQL. The &lt;a href="https://duckdb.org/docs/current/connect/overview" rel="noopener noreferrer"&gt;official connection guide&lt;/a&gt; explains both modes.&lt;/p&gt;

&lt;p&gt;The database can also run inside applications written in Python, R, Java, Node.js, and other languages through its client APIs. This does not mean those languages run inside a normal SQL editor. The application connects to the database and sends SQL through a library; the editor itself still executes SQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Is It Different from Traditional Databases?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://visualeaf.com/database/mysql/" rel="noopener noreferrer"&gt;MySQL&lt;/a&gt; and &lt;a href="https://visualeaf.com/database/postgresql/" rel="noopener noreferrer"&gt;PostgreSQL&lt;/a&gt; normally run as database servers. An application connects through a host and port and authenticates with a user account. That model suits applications with many users, frequent writes, user permissions, and continuous transactional traffic.&lt;/p&gt;

&lt;p&gt;With an embedded database, you can open one local file from a command-line tool, programming language, or GUI. Use a server when several users or applications must write continuously. Use a local OLAP database when your main work is reading, joining, grouping, and summarizing data.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Should You Use DuckDB?
&lt;/h2&gt;

&lt;p&gt;It is a good fit when you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect a CSV export from another application;&lt;/li&gt;
&lt;li&gt;analyze one or more Parquet files;&lt;/li&gt;
&lt;li&gt;prototype an analytical query before moving it into a larger pipeline;&lt;/li&gt;
&lt;li&gt;create a small persistent database for local reporting;&lt;/li&gt;
&lt;li&gt;add analytical SQL to a Python, R, or Java application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For our test, we created a retail analytics database containing customers, products, orders, order items, and clickstream events. It gave us primary keys, foreign keys, constraints, nested data types, and files that we could query alongside the tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Create and Open a Local Database?
&lt;/h2&gt;

&lt;p&gt;After &lt;a href="https://duckdb.org/install/?platform=windows&amp;amp;environment=cli" rel="noopener noreferrer"&gt;downloading the Windows command-line client&lt;/a&gt;, pass it the path where you want to store the database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;amp; "C:\Program Files\DuckDB\duckdb.exe" "C:\DuckDB\visualeaf_demo.duckdb"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the file does not exist, this command creates it. If it already exists, the same command opens it. Use a file instead of &lt;code&gt;:memory:&lt;/code&gt; when you want to keep your tables, views, and data between sessions.&lt;/p&gt;

&lt;p&gt;To open the same database in &lt;a href="https://visualeaf.com" rel="noopener noreferrer"&gt;VisuaLeaf&lt;/a&gt;, create a connection and select:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\DuckDB\visualeaf_demo.duckdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No server credentials are required. After connecting, refresh the sidebar to browse the schemas, tables, views, columns, constraints, and indexes available in the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4mlffmfy0xyxxsh7bg4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4mlffmfy0xyxxsh7bg4.png" alt="DuckDB connection form in VisuaLeaf showing a successful connection to a local database file." width="800" height="724"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connecting to a local DuckDB database file in VisuaLeaf without configuring a database server.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Can You Browse and Edit DuckDB Data with a GUI?
&lt;/h2&gt;

&lt;p&gt;Query results are easier to inspect in a data grid than in terminal output, especially when a table contains many columns. You can open a table, sort or filter its records, compare values, and move through the results without writing a new query for every action.&lt;/p&gt;

&lt;p&gt;You can also edit values inline or add a row directly from the grid. This works well for small corrections and test records. For bulk changes or operations you need to repeat, use an &lt;code&gt;UPDATE&lt;/code&gt; or &lt;code&gt;INSERT&lt;/code&gt; statement instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fihgxx09mi2p3nw9wvd69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fihgxx09mi2p3nw9wvd69.png" alt="Browsing and editing DuckDB records directly in the data grid." width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DuckDB table data displayed in the VisuaLeaf data grid&lt;/p&gt;

&lt;p&gt;VisuaLeaf’s SQL Editor executes SQL only. Applications written in Python, R, or Java connect through their own DuckDB libraries; you cannot paste those languages into the SQL editor. The &lt;a href="https://visualeaf.com/database/duckdb/" rel="noopener noreferrer"&gt;DuckDB GUI client&lt;/a&gt; page covers the complete visual interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Inspect Tables, Keys, and Data Types?
&lt;/h2&gt;

&lt;p&gt;Before writing a query, it helps to check the table definition. In our &lt;code&gt;orders&lt;/code&gt; table, &lt;code&gt;order_id&lt;/code&gt; is an &lt;code&gt;INTEGER&lt;/code&gt; primary key, &lt;code&gt;customer_id&lt;/code&gt; is a foreign key, &lt;code&gt;ordered_at&lt;/code&gt; uses the &lt;code&gt;TIMESTAMP&lt;/code&gt; type, and &lt;code&gt;total_amount&lt;/code&gt; is stored as &lt;code&gt;DECIMAL(12,2)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The table editor also shows nullability, default values, indexes, and constraints. These details tell you what values a column accepts and whether it connects to another table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftawwuw8e68ak1eiad4tb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftawwuw8e68ak1eiad4tb.png" alt="DuckDB orders table structure and foreign key displayed in VisuaLeaf" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspecting the orders table, column types, primary key, foreign key, and constraints.&lt;/p&gt;

&lt;p&gt;The schema also uses nested data types. &lt;code&gt;customers.profile&lt;/code&gt; is a &lt;code&gt;STRUCT&lt;/code&gt; containing &lt;code&gt;country&lt;/code&gt; and &lt;code&gt;segment&lt;/code&gt;, while &lt;code&gt;customers.interests&lt;/code&gt; is a &lt;code&gt;VARCHAR[]&lt;/code&gt; list. You can access both with SQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;full_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;segment&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;unnest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interests&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;interest&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;list_contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interests&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'analytics'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;STRUCT&lt;/code&gt; and &lt;code&gt;LIST&lt;/code&gt; keep related values together, but updating them can expose an index limitation. In our test, changing &lt;code&gt;interests&lt;/code&gt; on a row with a primary key returned a duplicate-key error even though &lt;code&gt;customer_id&lt;/code&gt; had not changed. Running the same update through SQL returned the same error, confirming that the visual editor did not cause it.&lt;/p&gt;

&lt;p&gt;The documentation explains that some updates are processed as a delete followed by an insert, which can cause a constraint to be checked too early. The workaround is to delete and reinsert the row in separate transaction steps. Do not remove a valid primary key to make the edit succeed. See the &lt;a href="https://duckdb.org/docs/current/sql/indexes#constraint-checking-in-update-statements" rel="noopener noreferrer"&gt;index limitations&lt;/a&gt; before updating indexed rows with nested values.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Query Parquet and CSV Files Directly?
&lt;/h2&gt;

&lt;p&gt;A CSV file stores rows as plain text. It is easy to open and widely supported, but it does not preserve database types reliably. Parquet is a column-based format designed for analytical data. It stores type information and can read only the columns a query needs. You do not need Parquet to start, but it becomes useful with larger analytical exports or data pipelines that already produce it.&lt;/p&gt;

&lt;p&gt;DuckDB can query both formats without first copying them into permanent tables. &lt;code&gt;read_parquet()&lt;/code&gt; opens a Parquet file as a queryable relation. &lt;code&gt;read_csv_auto()&lt;/code&gt; reads a CSV file and detects its columns and types.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;read_parquet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:/DuckDB/events.parquet'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;read_csv_auto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:/DuckDB/orders.csv'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The query below summarizes clickstream events from &lt;code&gt;events.parquet&lt;/code&gt;, summarizes completed sales from &lt;code&gt;orders.csv&lt;/code&gt;, and joins the two monthly results:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WITH parquet_activity AS (
    SELECT
        date_trunc('month', occurred_at)::DATE AS month,
        count(*) AS events,
        count(DISTINCT customer_id) AS active_customers,
        round(avg(properties.engagement_score), 1) AS avg_engagement
    FROM read_parquet('C:/DuckDB/events.parquet')
    WHERE occurred_at &amp;lt; TIMESTAMP '2025-11-01'
    GROUP BY ALL
),
csv_sales AS (
    SELECT
        date_trunc('month', ordered_at)::DATE AS month,
        count(*) FILTER (WHERE status = 'completed') AS completed_orders,
        round(
            sum(total_amount) FILTER (WHERE status = 'completed'),
            2
        ) AS revenue
    FROM read_csv_auto('C:/DuckDB/orders.csv', header = true)
    WHERE ordered_at &amp;lt; TIMESTAMP '2025-11-01'
    GROUP BY ALL
)
SELECT
    p.month,
    p.events,
    p.active_customers,
    p.avg_engagement,
    c.completed_orders,
    c.revenue
FROM parquet_activity AS p
JOIN csv_sales AS c USING (month)
ORDER BY p.month;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc43l9tgj6xv4qqgedr8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc43l9tgj6xv4qqgedr8q.png" alt="One SQL query combines monthly activity from _events.parquet_ with revenue from _orders.csv_." width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One SQL query combines monthly activity from&lt;/strong&gt; &lt;code&gt;_events.parquet_&lt;/code&gt; &lt;strong&gt;with revenue from&lt;/strong&gt; &lt;code&gt;_orders.csv_&lt;/code&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Parquet supports projection and filter pushdown, so the engine can avoid reading columns or row groups that the query does not need. The &lt;a href="https://duckdb.org/docs/current/guides/performance/file_formats" rel="noopener noreferrer"&gt;file-format guide&lt;/a&gt; also explains when repeatedly queried data may perform better after loading it into database tables. For CSV, automatic detection is convenient, but you should specify column types if the inferred result is wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can You Visualize Tables and Relationships in an ER Diagram?
&lt;/h2&gt;

&lt;p&gt;Our relational path is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customers → orders → order_items → products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primary keys identify each customer, order, product, and order item. Foreign keys connect &lt;code&gt;orders.customer_id&lt;/code&gt; to &lt;code&gt;customers.customer_id&lt;/code&gt;, while &lt;code&gt;order_items.order_id&lt;/code&gt; and &lt;code&gt;order_items.product_id&lt;/code&gt; connect each line to its order and product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsou0esn3p5je2uq6jfcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsou0esn3p5je2uq6jfcd.png" alt="DuckDB ER diagram with customers orders order items products and events" width="799" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Retail Analytics Schema showing how customers, orders, order items, and products connect.&lt;/p&gt;

&lt;p&gt;VisuaLeaf reads the existing keys and draws the relationships in an &lt;a href="https://visualeaf.com/features/visual-schema/" rel="noopener noreferrer"&gt;ER diagram.&lt;/a&gt; This makes the path from a customer to an order and its products easier to follow than reading separate &lt;code&gt;CREATE TABLE&lt;/code&gt; statements. The &lt;code&gt;events&lt;/code&gt; table remains outside that transactional path because it records customer activity rather than an order or product relationship.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Turn Query Results into Charts?
&lt;/h2&gt;

&lt;p&gt;Query results can also become charts. In this example, we used the &lt;code&gt;main.monthly_revenue&lt;/code&gt; view, selected &lt;code&gt;channel&lt;/code&gt; as the category, and calculated the sum of &lt;code&gt;revenue&lt;/code&gt;. The chart shows each channel’s share of total revenue across the selected period.&lt;/p&gt;

&lt;p&gt;Mobile and partner sales generated the largest shares of revenue, while store and web contributed smaller shares. &lt;a href="https://visualeaf.com/features/chart-builder/" rel="noopener noreferrer"&gt;Charts&lt;/a&gt; make these differences easier to notice, but you should still verify the underlying SQL, filters, and aggregation settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6pgmi4dl6gy2xnt436k5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6pgmi4dl6gy2xnt436k5.png" alt="Pie chart in VisuaLeaf showing DuckDB revenue grouped by sales channel." width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comparing total DuckDB revenue across mobile, partner, store, and web sales channels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Use the CLI or a GUI?
&lt;/h2&gt;

&lt;p&gt;Use the CLI for quick queries, repeatable scripts, and lightweight automation. Use a programming-language client when the database is embedded in a Python, R, Java, or another application. Use a GUI when you need to discover a schema, browse wide results, inspect data types, save SQL, view an ER diagram, or build charts while keeping the underlying data visible.&lt;/p&gt;

&lt;p&gt;These options are not mutually exclusive. A persistent file can be created from the CLI, queried from an application, and opened visually. Just avoid concurrent writes from separate processes unless your connection pattern supports them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need to convert a CSV file to Parquet first?
&lt;/h3&gt;

&lt;p&gt;No. Query the CSV directly with &lt;code&gt;read_csv_auto()&lt;/code&gt;. Consider Parquet when the dataset is large, you repeatedly read selected columns, or your existing workflow already produces it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to import a Parquet file into a table?
&lt;/h3&gt;

&lt;p&gt;No. You can query it directly with &lt;code&gt;read_parquet()&lt;/code&gt;. Loading it into a table can still help when you run many repeated queries and want database statistics and storage optimizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;DuckDB is useful when your data is local, your workload is analytical, and a traditional server would add more setup than value. You can keep data in one persistent file, query CSV and Parquet directly, inspect nested and relational structures, verify foreign keys, and turn SQL results into charts.&lt;/p&gt;

&lt;p&gt;Start with one real question about your data. Open the database or source file, inspect its columns, write the smallest query that answers the question, and verify the result before adding another layer. That workflow works whether you prefer a command line, an application, or a visual client.&lt;/p&gt;

&lt;p&gt;Want to try the same workflow with your own DuckDB database? &lt;a href="https://visualeaf.com/download" rel="noopener noreferrer"&gt;Download VisuaLeaf&lt;/a&gt; to open your &lt;code&gt;.duckdb&lt;/code&gt; file, explore its data, run SQL queries, view relationships, and create charts in one workspace.&lt;/p&gt;

</description>
      <category>duckdb</category>
      <category>sql</category>
      <category>database</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Run mongodump from PowerShell, automate MongoDB backups in VisuaLeaf, schedule recurring tasks, inspect BSON files, and verify them with mongorestore.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:08:38 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/run-mongodump-from-powershell-automate-mongodb-backups-in-visualeaf-schedule-recurring-tasks-4i9n</link>
      <guid>https://dev.to/roxana_haidiner/run-mongodump-from-powershell-automate-mongodb-backups-in-visualeaf-schedule-recurring-tasks-4i9n</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/mongodump-tasks-automate-and-schedule-mongodb-backups-1emf" class="crayons-story__hidden-navigation-link"&gt;mongodump Tasks Automate and Schedule MongoDB Backups&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image" width="150" height="150"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
                
              
              &lt;div id="story-author-preview-content-4536313" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt="" width="150" height="150"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/mongodump-tasks-automate-and-schedule-mongodb-backups-1emf" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 31&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/mongodump-tasks-automate-and-schedule-mongodb-backups-1emf" id="article-link-4536313"&gt;
          mongodump Tasks Automate and Schedule MongoDB Backups
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/nosql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;nosql&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sql&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/mongodump-tasks-automate-and-schedule-mongodb-backups-1emf" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/mongodump-tasks-automate-and-schedule-mongodb-backups-1emf#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>automation</category>
      <category>database</category>
      <category>devops</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>A practical PostgreSQL JSONB workflow for querying nested values, updating individual fields, and indexing containment searches with GIN.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Tue, 18 Aug 2026 11:22:12 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/a-practical-postgresql-jsonb-workflow-for-querying-nested-values-updating-individual-fields-and-37fo</link>
      <guid>https://dev.to/roxana_haidiner/a-practical-postgresql-jsonb-workflow-for-querying-nested-values-updating-individual-fields-and-37fo</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/postgresql-jsonb-query-update-and-index-json-data-1h21" class="crayons-story__hidden-navigation-link"&gt;PostgreSQL JSONB: Query, Update, and Index JSON Data&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
                
              
              &lt;div id="story-author-preview-content-4425815" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/postgresql-jsonb-query-update-and-index-json-data-1h21" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 18&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/postgresql-jsonb-query-update-and-index-json-data-1h21" id="article-link-4425815"&gt;
          PostgreSQL JSONB: Query, Update, and Index JSON Data
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/postgres"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;postgres&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/postgressql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;postgressql&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sql&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/postgresql-jsonb-query-update-and-index-json-data-1h21" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/postgresql-jsonb-query-update-and-index-json-data-1h21#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Design a MongoDB schema from scratch or reverse-engineer an existing database visually. Define fields, relationships, validators, and materialize it.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Thu, 06 Aug 2026 12:33:29 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/design-a-mongodb-schema-from-scratch-or-reverse-engineer-an-existing-database-visually-define-j1k</link>
      <guid>https://dev.to/roxana_haidiner/design-a-mongodb-schema-from-scratch-or-reverse-engineer-an-existing-database-visually-define-j1k</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/mongodb-schema-design-build-or-reverse-engineer-visually-5d28" class="crayons-story__hidden-navigation-link"&gt;MongoDB Schema Design: Build or Reverse Engineer Visually&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
              
              &lt;div id="story-author-preview-content-4331953" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/mongodb-schema-design-build-or-reverse-engineer-visually-5d28" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/mongodb-schema-design-build-or-reverse-engineer-visually-5d28" id="article-link-4331953"&gt;
          MongoDB Schema Design: Build or Reverse Engineer Visually
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/mongodb-schema-design-build-or-reverse-engineer-visually-5d28" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/mongodb-schema-design-build-or-reverse-engineer-visually-5d28#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>See how VisuaLeaf, MongoDB Compass, and Studio 3T handle large collections, compare data, automate tasks, and analyze queries, and which one fits best.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Tue, 04 Aug 2026 07:57:54 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/see-how-visualeaf-mongodb-compass-and-studio-3t-handle-large-collections-compare-data-automate-3ogd</link>
      <guid>https://dev.to/roxana_haidiner/see-how-visualeaf-mongodb-compass-and-studio-3t-handle-large-collections-compare-data-automate-3ogd</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/which-mongodb-client-handles-large-collections-best-visualeaf-vs-compass-vs-studio-3t-1jam" class="crayons-story__hidden-navigation-link"&gt;Which MongoDB Client Handles Large Collections Best: VisuaLeaf vs Compass vs Studio 3T&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
              
              &lt;div id="story-author-preview-content-4310329" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/which-mongodb-client-handles-large-collections-best-visualeaf-vs-compass-vs-studio-3t-1jam" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 4&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/which-mongodb-client-handles-large-collections-best-visualeaf-vs-compass-vs-studio-3t-1jam" id="article-link-4310329"&gt;
          Which MongoDB Client Handles Large Collections Best: VisuaLeaf vs Compass vs Studio 3T
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/which-mongodb-client-handles-large-collections-best-visualeaf-vs-compass-vs-studio-3t-1jam" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/which-mongodb-client-handles-large-collections-best-visualeaf-vs-compass-vs-studio-3t-1jam#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Learn how to copy a MongoDB collection to PostgreSQL, map nested fields to JSONB, and keep inserts, updates, and deletes in sync.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Tue, 28 Jul 2026 07:48:17 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/learn-how-to-copy-a-mongodb-collection-to-postgresql-map-nested-fields-to-jsonb-and-keep-inserts-4dm7</link>
      <guid>https://dev.to/roxana_haidiner/learn-how-to-copy-a-mongodb-collection-to-postgresql-map-nested-fields-to-jsonb-and-keep-inserts-4dm7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-mongodb-collection-to-postgresql-1of7" class="crayons-story__hidden-navigation-link"&gt;How to Copy and Sync a MongoDB Collection to PostgreSQL&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
              
              &lt;div id="story-author-preview-content-4251582" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-mongodb-collection-to-postgresql-1of7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-mongodb-collection-to-postgresql-1of7" id="article-link-4251582"&gt;
          How to Copy and Sync a MongoDB Collection to PostgreSQL
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/postgres"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;postgres&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-mongodb-collection-to-postgresql-1of7" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-mongodb-collection-to-postgresql-1of7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Learn how to import JSON orders into MongoDB, copy them into a main collection, export a weekly CSV report, and mask customer data during export using VisuaLeaf Task Manager.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Thu, 23 Jul 2026 09:21:34 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/learn-how-to-import-json-orders-into-mongodb-copy-them-into-a-main-collection-export-a-weekly-csv-5a07</link>
      <guid>https://dev.to/roxana_haidiner/learn-how-to-import-json-orders-into-mongodb-copy-them-into-a-main-collection-export-a-weekly-csv-5a07</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/how-to-import-json-into-mongodb-and-export-to-csv-with-data-masking-58p4" class="crayons-story__hidden-navigation-link"&gt;How to Import JSON into MongoDB and Export to CSV with Data Masking&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
              
              &lt;div id="story-author-preview-content-4213390" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-import-json-into-mongodb-and-export-to-csv-with-data-masking-58p4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/how-to-import-json-into-mongodb-and-export-to-csv-with-data-masking-58p4" id="article-link-4213390"&gt;
          How to Import JSON into MongoDB and Export to CSV with Data Masking
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwaredevelopment"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwaredevelopment&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-import-json-into-mongodb-and-export-to-csv-with-data-masking-58p4" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/how-to-import-json-into-mongodb-and-export-to-csv-with-data-masking-58p4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Learn how to copy a local MongoDB collection to MongoDB Atlas and keep inserts, updates, and deletes synchronized with Mongo Sync.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Tue, 21 Jul 2026 11:25:52 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/learn-how-to-copy-a-local-mongodb-collection-to-mongodb-atlas-and-keep-inserts-updates-and-hj7</link>
      <guid>https://dev.to/roxana_haidiner/learn-how-to-copy-a-local-mongodb-collection-to-mongodb-atlas-and-keep-inserts-updates-and-hj7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-local-mongodb-collection-to-atlas-9me" class="crayons-story__hidden-navigation-link"&gt;How to Copy and Sync a Local MongoDB Collection to Atlas&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
              
              &lt;div id="story-author-preview-content-4188617" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-local-mongodb-collection-to-atlas-9me" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 20&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-local-mongodb-collection-to-atlas-9me" id="article-link-4188617"&gt;
          How to Copy and Sync a Local MongoDB Collection to Atlas
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-local-mongodb-collection-to-atlas-9me" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/how-to-copy-and-sync-a-local-mongodb-collection-to-atlas-9me#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Learn 7 common MongoDB query mistakes with simple find() examples, including $or, $in, nested fields, dates, and text search.</title>
      <dc:creator>Roxana-Maria Haidiner</dc:creator>
      <pubDate>Tue, 14 Jul 2026 09:42:37 +0000</pubDate>
      <link>https://dev.to/roxana_haidiner/learn-7-common-mongodb-query-mistakes-with-simple-find-examples-including-or-in-nested-137p</link>
      <guid>https://dev.to/roxana_haidiner/learn-7-common-mongodb-query-mistakes-with-simple-find-examples-including-or-in-nested-137p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/visualeaf/7-mongodb-query-mistakes-that-return-the-wrong-results-5faj" class="crayons-story__hidden-navigation-link"&gt;7 MongoDB Query Mistakes That Return the Wrong Results&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/visualeaf" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" alt="visualeaf profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/visualeaf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              VisuaLeaf
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                VisuaLeaf
                
              
              &lt;div id="story-author-preview-content-4140830" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/visualeaf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818324%2F6cb54fe1-a36c-4f1a-a7b5-fa360f5daf8a.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;VisuaLeaf&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/visualeaf/7-mongodb-query-mistakes-that-return-the-wrong-results-5faj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/visualeaf/7-mongodb-query-mistakes-that-return-the-wrong-results-5faj" id="article-link-4140830"&gt;
          7 MongoDB Query Mistakes That Return the Wrong Results
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mongodb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mongodb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/coding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;coding&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/database"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;database&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/visualeaf/7-mongodb-query-mistakes-that-return-the-wrong-results-5faj" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;12&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/visualeaf/7-mongodb-query-mistakes-that-return-the-wrong-results-5faj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>database</category>
      <category>mongodb</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
