<?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: Kundanika Nampally</title>
    <description>The latest articles on DEV Community by Kundanika Nampally (@kundanika_nampally).</description>
    <link>https://dev.to/kundanika_nampally</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3900294%2F122eebf5-6793-4bf5-9f92-37357269dc0f.png</url>
      <title>DEV Community: Kundanika Nampally</title>
      <link>https://dev.to/kundanika_nampally</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kundanika_nampally"/>
    <language>en</language>
    <item>
      <title>Breaking Language Barriers in Agriculture: How MongoDB Atlas Powers FarmAI for Intelligent Crop Diagnostics</title>
      <dc:creator>Kundanika Nampally</dc:creator>
      <pubDate>Tue, 28 Apr 2026 14:04:17 +0000</pubDate>
      <link>https://dev.to/kundanika_nampally/breaking-language-barriers-in-agriculture-how-mongodb-atlas-powers-farmai-for-intelligent-crop-dhi</link>
      <guid>https://dev.to/kundanika_nampally/breaking-language-barriers-in-agriculture-how-mongodb-atlas-powers-farmai-for-intelligent-crop-dhi</guid>
      <description>&lt;h2&gt;
  
  
  Team Members
&lt;/h2&gt;

&lt;p&gt;This project was developed by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/kundanika_nampally"&gt;@kundanika_nampally&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/pooja_avula"&gt;@pooja_avula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/swethasriram265"&gt;@swethasriram265&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/chelimerigari_vivekitha"&gt;@chelimerigari_vivekitha&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In many parts of rural India, farmers don't have immediate access to agricultural experts. Imagine a farmer in Telangana noticing his rice crop turning yellow. The issue could be anything — nutrient deficiency, disease, or water stress — but identifying the exact problem isn't easy.&lt;/p&gt;

&lt;p&gt;Most online resources are in English, and consulting an expert is often expensive or unavailable. Delays in diagnosis can lead to serious crop damage.&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;FarmAI&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;FarmAI allows farmers to &lt;strong&gt;ask questions in their own language&lt;/strong&gt; — Telugu, Hindi, Tamil, and more — and receive &lt;strong&gt;instant, AI-powered crop stress diagnosis along with actionable advice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To make this system reliable and fast, we needed a backend that could handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multilingual data&lt;/li&gt;
&lt;li&gt;flexible document structures&lt;/li&gt;
&lt;li&gt;real-time analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We chose MongoDB Atlas — and it became a central part of our architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Built: The Tech Stack
&lt;/h2&gt;

&lt;p&gt;FarmAI is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Django&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB Atlas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ML Model:&lt;/strong&gt; TF-IDF + Logistic Regression&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NLP Pipeline:&lt;/strong&gt; Multilingual query processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs:&lt;/strong&gt; Django REST Framework + GraphQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each farmer interaction is stored as a &lt;strong&gt;rich document&lt;/strong&gt;, not just plain text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;query_document&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_001@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my rice crop leaves are turning yellow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_language&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;te&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;detected_stress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NUTRIENT_DEFICIENCY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;crop_detected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-04-07T10:23:00Z&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;advisory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;immediate_action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Apply urea&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;treatments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Spray urea solution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The flexibility of MongoDB's document model made it easy to evolve this structure as our ML outputs improved.&lt;/p&gt;




&lt;h2&gt;
  
  
  MongoDB Features We Explored
&lt;/h2&gt;

&lt;p&gt;Instead of relying on multiple queries and heavy backend logic, we used MongoDB's aggregation framework to push computation directly into the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;$facet&lt;/code&gt; — Multiple Queries in a Single Round Trip
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$facet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;           &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;today&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;           &lt;span class="p"&gt;[...],&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;this_week&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="p"&gt;[...],&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unique_crops&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="p"&gt;[...],&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stress_breakdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:[...]&lt;/span&gt;
   &lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  What it does
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;$facet&lt;/code&gt; stage allows multiple aggregations to run &lt;strong&gt;in parallel within a single query&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of executing 5 separate queries like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;total records&lt;/li&gt;
&lt;li&gt;today's data&lt;/li&gt;
&lt;li&gt;weekly data&lt;/li&gt;
&lt;li&gt;unique crops&lt;/li&gt;
&lt;li&gt;stress analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I combined everything into &lt;strong&gt;one MongoDB call&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Impact on my project
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Reduced database round trips significantly&lt;/li&gt;
&lt;li&gt;Improved API response time&lt;/li&gt;
&lt;li&gt;Cleaner backend logic (single pipeline instead of multiple queries)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. &lt;code&gt;$group&lt;/code&gt; + &lt;code&gt;$project&lt;/code&gt; + &lt;code&gt;$substr&lt;/code&gt; → Peak Usage Hours
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pipeline_hours&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$project&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hour&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$toInt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$substr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]}}&lt;/span&gt;
   &lt;span class="p"&gt;}},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$group&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$hour&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$sum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$sort&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  What it does
&lt;/h4&gt;

&lt;p&gt;This pipeline extracts the &lt;strong&gt;hour (0–23)&lt;/strong&gt; from a timestamp string and calculates how many queries occur in each hour.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$substr&lt;/code&gt; → extracts hour from timestamp&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$toInt&lt;/code&gt; → converts it to a number&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$group&lt;/code&gt; → counts occurrences&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$sort&lt;/code&gt; → orders results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This powers a &lt;strong&gt;"Peak Usage Hours" chart&lt;/strong&gt; in my dashboard.&lt;/p&gt;

&lt;h4&gt;
  
  
  Impact on my project
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Enabled time-based insights&lt;/li&gt;
&lt;li&gt;Helped identify peak system usage&lt;/li&gt;
&lt;li&gt;Improved data visualization for users&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. &lt;code&gt;$bucket&lt;/code&gt; → Confidence Score Distribution
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pipeline_conf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$bucket&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;groupBy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$confidence_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;boundaries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.01&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
       &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$sum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
   &lt;span class="p"&gt;}},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  What it does
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;$bucket&lt;/code&gt; stage groups values into predefined ranges — similar to a histogram.&lt;/p&gt;

&lt;p&gt;In my case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0–20%&lt;/li&gt;
&lt;li&gt;20–40%&lt;/li&gt;
&lt;li&gt;40–60%&lt;/li&gt;
&lt;li&gt;60–80%&lt;/li&gt;
&lt;li&gt;80–100%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shows how confident the system is across predictions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Impact on my project
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Simplified statistical analysis&lt;/li&gt;
&lt;li&gt;No need for frontend computation&lt;/li&gt;
&lt;li&gt;Enabled quick visualization of model performance&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. &lt;code&gt;$match&lt;/code&gt; → User-Specific Data Filtering
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  What it does
&lt;/h4&gt;

&lt;p&gt;Every pipeline begins with &lt;code&gt;$match&lt;/code&gt; to filter data based on the logged-in user.&lt;/p&gt;

&lt;p&gt;This ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users only access their own data&lt;/li&gt;
&lt;li&gt;Queries remain efficient by reducing dataset size early&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Impact on my project
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Improved security and data isolation&lt;/li&gt;
&lt;li&gt;Faster aggregation performance&lt;/li&gt;
&lt;li&gt;Better scalability for multi-user systems&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why These Features Matter
&lt;/h2&gt;

&lt;p&gt;By combining these MongoDB features, I was able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace multiple queries with single optimized pipelines&lt;/li&gt;
&lt;li&gt;Perform analytics directly inside the database&lt;/li&gt;
&lt;li&gt;Reduce backend complexity&lt;/li&gt;
&lt;li&gt;Improve overall performance and scalability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Login/Register Page
&lt;/h3&gt;

&lt;p&gt;User authentication interface allowing farmers to securely register and log in to access personalized services.&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.amazonaws.com%2Fuploads%2Farticles%2Fpcm2tg3xg9pev2mhll39.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.amazonaws.com%2Fuploads%2Farticles%2Fpcm2tg3xg9pev2mhll39.png" alt="Login/Register" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard Page
&lt;/h3&gt;

&lt;p&gt;Interactive dashboard displaying query statistics, crop insights, and real-time analytics for the logged-in farmer.&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.amazonaws.com%2Fuploads%2Farticles%2Ff9d29dntx3zqqwvh5k51.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.amazonaws.com%2Fuploads%2Farticles%2Ff9d29dntx3zqqwvh5k51.png" alt="Dashboard Page" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Profile Page
&lt;/h3&gt;

&lt;p&gt;User profile view showing farmer details and account-specific information used for personalized recommendations.&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.amazonaws.com%2Fuploads%2Farticles%2F6ok7faykcbfhumagfnol.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.amazonaws.com%2Fuploads%2Farticles%2F6ok7faykcbfhumagfnol.png" alt="Profile Page" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Query Result
&lt;/h3&gt;

&lt;p&gt;AI-generated crop diagnosis with detected stress type, confidence score, and recommended actions.&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.amazonaws.com%2Fuploads%2Farticles%2Fyv92j9c1x2dwl1shmz8r.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.amazonaws.com%2Fuploads%2Farticles%2Fyv92j9c1x2dwl1shmz8r.png" alt="Query Result" width="800" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Atlas Farmer Queries
&lt;/h3&gt;

&lt;p&gt;MongoDB Atlas collection storing farmer queries along with predictions, timestamps, and advisory data.&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.amazonaws.com%2Fuploads%2Farticles%2F04ov0agiogo3u89nch77.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.amazonaws.com%2Fuploads%2Farticles%2F04ov0agiogo3u89nch77.png" alt="Atlas Farmer Queries" width="670" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  MongoDB Terminal
&lt;/h3&gt;

&lt;p&gt;MongoDB shell interface used to execute queries and verify database operations during development.&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.amazonaws.com%2Fuploads%2Farticles%2Flz38hwcriaenelmgksuz.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.amazonaws.com%2Fuploads%2Farticles%2Flz38hwcriaenelmgksuz.png" alt="MongoDB Terminal" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A Bug That Took Time to Find
&lt;/h2&gt;

&lt;p&gt;Our MongoDB connection was silently failing. Queries appeared to work — the app ran fine — but nothing was reaching Atlas. On server restart, all data disappeared.&lt;/p&gt;

&lt;p&gt;The cause: our password &lt;code&gt;Password$xx&lt;/code&gt; contained a &lt;code&gt;$&lt;/code&gt; character. In a MongoDB URI, &lt;code&gt;$&lt;/code&gt; must be URL-encoded as &lt;code&gt;%24&lt;/code&gt;. Without encoding, PyMongo failed to authenticate and silently fell back to in-memory storage — no error, no warning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Wrong
&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;srv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Password&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;xx&lt;/span&gt;&lt;span class="nd"&gt;@cluster...&lt;/span&gt;

&lt;span class="c1"&gt;# Correct
&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;srv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Password&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="n"&gt;xx&lt;/span&gt;&lt;span class="nd"&gt;@cluster...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this fix, every query correctly reached Atlas and appeared in the collection browser under the right &lt;code&gt;farmer_id&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.amazonaws.com%2Fuploads%2Farticles%2F7u8zjz98jhu8ms94jumj.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.amazonaws.com%2Fuploads%2Farticles%2F7u8zjz98jhu8ms94jumj.png" alt="Error-resolved" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact on Our Project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;4–5 queries → &lt;strong&gt;1 &lt;code&gt;$facet&lt;/code&gt; pipeline&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No more Python data processing&lt;/li&gt;
&lt;li&gt;Analytics handled directly in MongoDB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Faster dashboard load&lt;/li&gt;
&lt;li&gt;Single DB call instead of multiple&lt;/li&gt;
&lt;li&gt;Parallel processing inside MongoDB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;farmer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Each user sees only their data&lt;/li&gt;
&lt;li&gt;No risk of exposing other users' info&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Analytics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$bucket&lt;/code&gt; → confidence distribution&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$group&lt;/code&gt; + &lt;code&gt;$substr&lt;/code&gt; → peak hours&lt;/li&gt;
&lt;li&gt;No backend calculations needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fix
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Password &lt;code&gt;$&lt;/code&gt; → encoded as &lt;code&gt;%24&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fixed data not saving issue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Result
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Faster&lt;/li&gt;
&lt;li&gt;✅ Secure&lt;/li&gt;
&lt;li&gt;✅ Cleaner code&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fewer database calls&lt;/strong&gt; — &lt;code&gt;$facet&lt;/code&gt; replaced multiple sequential queries with a single pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High performance&lt;/strong&gt; — faster response times due to reduced DB round trips and parallel execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in analytics&lt;/strong&gt; — &lt;code&gt;$bucket&lt;/code&gt;, &lt;code&gt;$group&lt;/code&gt;, and &lt;code&gt;$substr&lt;/code&gt; handle all computations inside MongoDB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time insights&lt;/strong&gt; — dashboard charts reflect live data directly from MongoDB Atlas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong data security&lt;/strong&gt; — &lt;code&gt;$match&lt;/code&gt; ensures per-user data isolation by design&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible schema&lt;/strong&gt; — easily added new fields without migrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean and maintainable backend&lt;/strong&gt; — reduced code complexity by shifting logic to aggregation pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficient time-based analysis&lt;/strong&gt; — peak usage hours derived directly from timestamps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete data in one document&lt;/strong&gt; — query, language, prediction, and advisory stored together&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Disadvantages / Challenges
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aggregation pipelines can be complex&lt;/strong&gt; — designing multi-stage pipelines like &lt;code&gt;$facet&lt;/code&gt; requires careful planning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard to debug&lt;/strong&gt; — errors inside &lt;code&gt;$facet&lt;/code&gt; often return empty results instead of clear failures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve&lt;/strong&gt; — understanding advanced stages like &lt;code&gt;$bucket&lt;/code&gt; and &lt;code&gt;$group&lt;/code&gt; takes time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge cases in &lt;code&gt;$bucket&lt;/code&gt;&lt;/strong&gt; — values like &lt;code&gt;1.0&lt;/code&gt; required adjusting boundaries (e.g., &lt;code&gt;1.01&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency on data format&lt;/strong&gt; — &lt;code&gt;$substr&lt;/code&gt; works only because timestamps follow a consistent ISO format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session handling complexity&lt;/strong&gt; — tight integration between GraphQL and Django required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request configuration issues&lt;/strong&gt; — missing &lt;code&gt;credentials: 'include'&lt;/code&gt; caused incorrect user mapping&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent connection issues&lt;/strong&gt; — incorrect MongoDB URI caused data not to persist properly&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Results / Output
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MongoDB Atlas Collection View
&lt;/h3&gt;

&lt;p&gt;Collection view showing structured documents for each farmer interaction.&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.amazonaws.com%2Fuploads%2Farticles%2Fq70z15q649hjm5v3xv8n.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.amazonaws.com%2Fuploads%2Farticles%2Fq70z15q649hjm5v3xv8n.png" alt="MongoDB Atlas Collection View" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Charts (Confidence, Stress, Peak Hours)
&lt;/h3&gt;

&lt;p&gt;Visualization of model confidence distribution, stress categories, and system usage patterns.&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.amazonaws.com%2Fuploads%2Farticles%2Fmj0jwc96oez852b0ibl3.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.amazonaws.com%2Fuploads%2Farticles%2Fmj0jwc96oez852b0ibl3.png" alt="Chart-1" width="800" height="402"&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Faw0ebq9uay0kuqr1vd78.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.amazonaws.com%2Fuploads%2Farticles%2Faw0ebq9uay0kuqr1vd78.png" alt="Chart-2" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard — Personal Query Count
&lt;/h3&gt;

&lt;p&gt;Personalized dashboard metric showing total number of queries made by the logged-in user.&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.amazonaws.com%2Fuploads%2Farticles%2F7zys8r4kuh27vvmt9bqt.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.amazonaws.com%2Fuploads%2Farticles%2F7zys8r4kuh27vvmt9bqt.png" alt="Dashboard Query Count" width="800" height="103"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;MongoDB Atlas did more than just store our data — it powered our analytics.&lt;/p&gt;

&lt;p&gt;Features like &lt;code&gt;$facet&lt;/code&gt;, &lt;code&gt;$bucket&lt;/code&gt;, &lt;code&gt;$group&lt;/code&gt; + &lt;code&gt;$substr&lt;/code&gt;, and &lt;code&gt;$match&lt;/code&gt; replaced large amounts of backend data-processing logic with fast, database-native pipelines. This made the system both simpler and more efficient.&lt;/p&gt;

&lt;p&gt;For a multilingual agricultural platform like FarmAI, where data is diverse and user privacy is critical, MongoDB's document model proved to be the right fit. Each document captures the complete interaction, while aggregation pipelines generate real-time insights with minimal overhead.&lt;/p&gt;

&lt;p&gt;The biggest takeaway from this project is clear:&lt;br&gt;
&lt;strong&gt;Push computation into the database, not the application layer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simplifies backend code&lt;/li&gt;
&lt;li&gt;improves performance&lt;/li&gt;
&lt;li&gt;ensures data remains consistent and secure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FarmAI shows that with the right tools, even a student-built system can deliver a scalable, real-world solution that makes a meaningful impact.&lt;/p&gt;


&lt;h2&gt;
  
  
  Acknowledgement
&lt;/h2&gt;

&lt;p&gt;Behind every good project is someone who asks the right questions. For us, that was &lt;a href="https://dev.to/chanda_rajkumar"&gt;@chanda_rajkumar&lt;/a&gt;. His mentorship pushed FarmAI from a rough idea to a working system — and for that, we are truly grateful.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔗 Project Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/vivekitha-19/PFSD_TEAM-09" rel="noopener noreferrer"&gt;View Source Code on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo (Render):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://farmai-vl1w.onrender.com/" rel="noopener noreferrer"&gt;Try FarmAI Live&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Video:&lt;/strong&gt;&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/ffaGl5rPt7s"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>django</category>
      <category>machinelearning</category>
      <category>agriculture</category>
    </item>
  </channel>
</rss>
