[{"data":1,"prerenderedAt":14196},["ShallowReactive",2],{"navigation":3,"/microservices-with-django/cloud-native-data-processing":1016,"/microservices-with-django/cloud-native-data-processing-surround":14191},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":893,"body":1018,"description":1028,"extension":14186,"links":14187,"meta":14188,"navigation":1209,"path":894,"seo":14189,"stem":895,"__hash__":14190},"docs/27.microservices-with-django/05.cloud-native-data-processing.md",{"type":1019,"value":1020,"toc":14166},"minimark",[1021,1025,1029,1034,1039,1080,1084,1598,1602,1606,1656,2266,2270,4903,4907,6228,6232,8705,8709,8713,10360,10364,11642,11646,12358,12362,13199,13203,13716,14120,14124,14127,14159,14162],[1022,1023,893],"h1",{"id":1024},"cloud-native-data-processing-with-mongodb",[1026,1027,1028],"p",{},"MongoDB is an excellent choice for microservices due to its flexible schema, horizontal scaling capabilities, and cloud-native features. This section explores how to integrate MongoDB with Django microservices for efficient data processing and storage.",[1030,1031,1033],"h2",{"id":1032},"why-mongodb-for-microservices","Why MongoDB for Microservices?",[1035,1036,1038],"h3",{"id":1037},"advantages-of-mongodb-in-microservices","Advantages of MongoDB in Microservices",[1040,1041,1042,1050,1056,1062,1068,1074],"ol",{},[1043,1044,1045,1049],"li",{},[1046,1047,1048],"strong",{},"Schema Flexibility",": Each service can evolve its data model independently",[1043,1051,1052,1055],{},[1046,1053,1054],{},"Horizontal Scaling",": Built-in sharding for handling large datasets",[1043,1057,1058,1061],{},[1046,1059,1060],{},"Document-based",": Natural fit for JSON APIs",[1043,1063,1064,1067],{},[1046,1065,1066],{},"Aggregation Pipeline",": Powerful data processing capabilities",[1043,1069,1070,1073],{},[1046,1071,1072],{},"Change Streams",": Real-time data synchronization",[1043,1075,1076,1079],{},[1046,1077,1078],{},"Cloud Integration",": Native support for cloud deployments",[1035,1081,1083],{"id":1082},"mongodb-vs-postgresql-for-microservices","MongoDB vs PostgreSQL for Microservices",[1085,1086,1091],"pre",{"className":1087,"code":1088,"language":1089,"meta":1090,"style":1090},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# PostgreSQL approach - rigid schema\nclass User(models.Model):\n    username = models.CharField(max_length=150)\n    email = models.EmailField()\n    profile_data = models.JSONField()  # Limited JSON support\n\n# MongoDB approach - flexible documents\n{\n    \"_id\": ObjectId(\"...\"),\n    \"username\": \"john_doe\",\n    \"email\": \"john@example.com\",\n    \"profile\": {\n        \"bio\": \"Software developer\",\n        \"preferences\": {\n            \"theme\": \"dark\",\n            \"notifications\": {\n                \"email\": True,\n                \"push\": False\n            }\n        },\n        \"social_links\": [\n            {\"platform\": \"github\", \"url\": \"https://github.com/johndoe\"},\n            {\"platform\": \"linkedin\", \"url\": \"https://linkedin.com/in/johndoe\"}\n        ]\n    },\n    \"created_at\": ISODate(\"2023-01-01T00:00:00Z\"),\n    \"last_login\": ISODate(\"2023-12-01T10:30:00Z\")\n}\n","python","",[1092,1093,1094,1103,1131,1165,1183,1204,1211,1217,1223,1255,1278,1299,1314,1336,1350,1372,1386,1404,1419,1425,1431,1446,1490,1530,1536,1542,1568,1593],"code",{"__ignoreMap":1090},[1095,1096,1099],"span",{"class":1097,"line":1098},"line",1,[1095,1100,1102],{"class":1101},"s9Tkl","# PostgreSQL approach - rigid schema\n",[1095,1104,1106,1110,1114,1118,1122,1125,1128],{"class":1097,"line":1105},2,[1095,1107,1109],{"class":1108},"s5Kfy","class",[1095,1111,1113],{"class":1112},"sD-vU"," User",[1095,1115,1117],{"class":1116},"soVBu","(",[1095,1119,1121],{"class":1120},"sYn-s","models",[1095,1123,1124],{"class":1116},".",[1095,1126,1127],{"class":1120},"Model",[1095,1129,1130],{"class":1116},"):\n",[1095,1132,1134,1138,1141,1144,1146,1150,1152,1156,1158,1162],{"class":1097,"line":1133},3,[1095,1135,1137],{"class":1136},"sftqT","    username ",[1095,1139,1140],{"class":1116},"=",[1095,1142,1143],{"class":1136}," models",[1095,1145,1124],{"class":1116},[1095,1147,1149],{"class":1148},"siWMO","CharField",[1095,1151,1117],{"class":1116},[1095,1153,1155],{"class":1154},"sqOPj","max_length",[1095,1157,1140],{"class":1116},[1095,1159,1161],{"class":1160},"s7CZa","150",[1095,1163,1164],{"class":1116},")\n",[1095,1166,1168,1171,1173,1175,1177,1180],{"class":1097,"line":1167},4,[1095,1169,1170],{"class":1136},"    email ",[1095,1172,1140],{"class":1116},[1095,1174,1143],{"class":1136},[1095,1176,1124],{"class":1116},[1095,1178,1179],{"class":1148},"EmailField",[1095,1181,1182],{"class":1116},"()\n",[1095,1184,1186,1189,1191,1193,1195,1198,1201],{"class":1097,"line":1185},5,[1095,1187,1188],{"class":1136},"    profile_data ",[1095,1190,1140],{"class":1116},[1095,1192,1143],{"class":1136},[1095,1194,1124],{"class":1116},[1095,1196,1197],{"class":1148},"JSONField",[1095,1199,1200],{"class":1116},"()",[1095,1202,1203],{"class":1101},"  # Limited JSON support\n",[1095,1205,1207],{"class":1097,"line":1206},6,[1095,1208,1210],{"emptyLinePlaceholder":1209},true,"\n",[1095,1212,1214],{"class":1097,"line":1213},7,[1095,1215,1216],{"class":1101},"# MongoDB approach - flexible documents\n",[1095,1218,1220],{"class":1097,"line":1219},8,[1095,1221,1222],{"class":1116},"{\n",[1095,1224,1226,1230,1234,1237,1240,1243,1245,1247,1250,1252],{"class":1097,"line":1225},9,[1095,1227,1229],{"class":1228},"sbYkP","    \"",[1095,1231,1233],{"class":1232},"sTbE_","_id",[1095,1235,1236],{"class":1228},"\"",[1095,1238,1239],{"class":1116},":",[1095,1241,1242],{"class":1148}," ObjectId",[1095,1244,1117],{"class":1116},[1095,1246,1236],{"class":1228},[1095,1248,1249],{"class":1232},"...",[1095,1251,1236],{"class":1228},[1095,1253,1254],{"class":1116},"),\n",[1095,1256,1258,1260,1263,1265,1267,1270,1273,1275],{"class":1097,"line":1257},10,[1095,1259,1229],{"class":1228},[1095,1261,1262],{"class":1232},"username",[1095,1264,1236],{"class":1228},[1095,1266,1239],{"class":1116},[1095,1268,1269],{"class":1228}," \"",[1095,1271,1272],{"class":1232},"john_doe",[1095,1274,1236],{"class":1228},[1095,1276,1277],{"class":1116},",\n",[1095,1279,1281,1283,1286,1288,1290,1292,1295,1297],{"class":1097,"line":1280},11,[1095,1282,1229],{"class":1228},[1095,1284,1285],{"class":1232},"email",[1095,1287,1236],{"class":1228},[1095,1289,1239],{"class":1116},[1095,1291,1269],{"class":1228},[1095,1293,1294],{"class":1232},"john@example.com",[1095,1296,1236],{"class":1228},[1095,1298,1277],{"class":1116},[1095,1300,1302,1304,1307,1309,1311],{"class":1097,"line":1301},12,[1095,1303,1229],{"class":1228},[1095,1305,1306],{"class":1232},"profile",[1095,1308,1236],{"class":1228},[1095,1310,1239],{"class":1116},[1095,1312,1313],{"class":1116}," {\n",[1095,1315,1317,1320,1323,1325,1327,1329,1332,1334],{"class":1097,"line":1316},13,[1095,1318,1319],{"class":1228},"        \"",[1095,1321,1322],{"class":1232},"bio",[1095,1324,1236],{"class":1228},[1095,1326,1239],{"class":1116},[1095,1328,1269],{"class":1228},[1095,1330,1331],{"class":1232},"Software developer",[1095,1333,1236],{"class":1228},[1095,1335,1277],{"class":1116},[1095,1337,1339,1341,1344,1346,1348],{"class":1097,"line":1338},14,[1095,1340,1319],{"class":1228},[1095,1342,1343],{"class":1232},"preferences",[1095,1345,1236],{"class":1228},[1095,1347,1239],{"class":1116},[1095,1349,1313],{"class":1116},[1095,1351,1353,1356,1359,1361,1363,1365,1368,1370],{"class":1097,"line":1352},15,[1095,1354,1355],{"class":1228},"            \"",[1095,1357,1358],{"class":1232},"theme",[1095,1360,1236],{"class":1228},[1095,1362,1239],{"class":1116},[1095,1364,1269],{"class":1228},[1095,1366,1367],{"class":1232},"dark",[1095,1369,1236],{"class":1228},[1095,1371,1277],{"class":1116},[1095,1373,1375,1377,1380,1382,1384],{"class":1097,"line":1374},16,[1095,1376,1355],{"class":1228},[1095,1378,1379],{"class":1232},"notifications",[1095,1381,1236],{"class":1228},[1095,1383,1239],{"class":1116},[1095,1385,1313],{"class":1116},[1095,1387,1389,1392,1394,1396,1398,1402],{"class":1097,"line":1388},17,[1095,1390,1391],{"class":1228},"                \"",[1095,1393,1285],{"class":1232},[1095,1395,1236],{"class":1228},[1095,1397,1239],{"class":1116},[1095,1399,1401],{"class":1400},"s8XtY"," True",[1095,1403,1277],{"class":1116},[1095,1405,1407,1409,1412,1414,1416],{"class":1097,"line":1406},18,[1095,1408,1391],{"class":1228},[1095,1410,1411],{"class":1232},"push",[1095,1413,1236],{"class":1228},[1095,1415,1239],{"class":1116},[1095,1417,1418],{"class":1400}," False\n",[1095,1420,1422],{"class":1097,"line":1421},19,[1095,1423,1424],{"class":1116},"            }\n",[1095,1426,1428],{"class":1097,"line":1427},20,[1095,1429,1430],{"class":1116},"        },\n",[1095,1432,1434,1436,1439,1441,1443],{"class":1097,"line":1433},21,[1095,1435,1319],{"class":1228},[1095,1437,1438],{"class":1232},"social_links",[1095,1440,1236],{"class":1228},[1095,1442,1239],{"class":1116},[1095,1444,1445],{"class":1116}," [\n",[1095,1447,1449,1452,1454,1457,1459,1461,1463,1466,1468,1471,1473,1476,1478,1480,1482,1485,1487],{"class":1097,"line":1448},22,[1095,1450,1451],{"class":1116},"            {",[1095,1453,1236],{"class":1228},[1095,1455,1456],{"class":1232},"platform",[1095,1458,1236],{"class":1228},[1095,1460,1239],{"class":1116},[1095,1462,1269],{"class":1228},[1095,1464,1465],{"class":1232},"github",[1095,1467,1236],{"class":1228},[1095,1469,1470],{"class":1116},",",[1095,1472,1269],{"class":1228},[1095,1474,1475],{"class":1232},"url",[1095,1477,1236],{"class":1228},[1095,1479,1239],{"class":1116},[1095,1481,1269],{"class":1228},[1095,1483,1484],{"class":1232},"https://github.com/johndoe",[1095,1486,1236],{"class":1228},[1095,1488,1489],{"class":1116},"},\n",[1095,1491,1493,1495,1497,1499,1501,1503,1505,1508,1510,1512,1514,1516,1518,1520,1522,1525,1527],{"class":1097,"line":1492},23,[1095,1494,1451],{"class":1116},[1095,1496,1236],{"class":1228},[1095,1498,1456],{"class":1232},[1095,1500,1236],{"class":1228},[1095,1502,1239],{"class":1116},[1095,1504,1269],{"class":1228},[1095,1506,1507],{"class":1232},"linkedin",[1095,1509,1236],{"class":1228},[1095,1511,1470],{"class":1116},[1095,1513,1269],{"class":1228},[1095,1515,1475],{"class":1232},[1095,1517,1236],{"class":1228},[1095,1519,1239],{"class":1116},[1095,1521,1269],{"class":1228},[1095,1523,1524],{"class":1232},"https://linkedin.com/in/johndoe",[1095,1526,1236],{"class":1228},[1095,1528,1529],{"class":1116},"}\n",[1095,1531,1533],{"class":1097,"line":1532},24,[1095,1534,1535],{"class":1116},"        ]\n",[1095,1537,1539],{"class":1097,"line":1538},25,[1095,1540,1541],{"class":1116},"    },\n",[1095,1543,1545,1547,1550,1552,1554,1557,1559,1561,1564,1566],{"class":1097,"line":1544},26,[1095,1546,1229],{"class":1228},[1095,1548,1549],{"class":1232},"created_at",[1095,1551,1236],{"class":1228},[1095,1553,1239],{"class":1116},[1095,1555,1556],{"class":1148}," ISODate",[1095,1558,1117],{"class":1116},[1095,1560,1236],{"class":1228},[1095,1562,1563],{"class":1232},"2023-01-01T00:00:00Z",[1095,1565,1236],{"class":1228},[1095,1567,1254],{"class":1116},[1095,1569,1571,1573,1576,1578,1580,1582,1584,1586,1589,1591],{"class":1097,"line":1570},27,[1095,1572,1229],{"class":1228},[1095,1574,1575],{"class":1232},"last_login",[1095,1577,1236],{"class":1228},[1095,1579,1239],{"class":1116},[1095,1581,1556],{"class":1148},[1095,1583,1117],{"class":1116},[1095,1585,1236],{"class":1228},[1095,1587,1588],{"class":1232},"2023-12-01T10:30:00Z",[1095,1590,1236],{"class":1228},[1095,1592,1164],{"class":1116},[1095,1594,1596],{"class":1097,"line":1595},28,[1095,1597,1529],{"class":1116},[1030,1599,1601],{"id":1600},"setting-up-mongodb-with-django","Setting Up MongoDB with Django",[1035,1603,1605],{"id":1604},"_1-installation-and-configuration","1. Installation and Configuration",[1085,1607,1611],{"className":1608,"code":1609,"language":1610,"meta":1090,"style":1090},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Install MongoDB and dependencies\npip install pymongo djongo mongoengine django-cors-headers\n\n# Alternative: Use MongoEngine (recommended)\npip install mongoengine\n","bash",[1092,1612,1613,1618,1638,1642,1647],{"__ignoreMap":1090},[1095,1614,1615],{"class":1097,"line":1098},[1095,1616,1617],{"class":1101},"# Install MongoDB and dependencies\n",[1095,1619,1620,1623,1626,1629,1632,1635],{"class":1097,"line":1105},[1095,1621,1622],{"class":1120},"pip",[1095,1624,1625],{"class":1232}," install",[1095,1627,1628],{"class":1232}," pymongo",[1095,1630,1631],{"class":1232}," djongo",[1095,1633,1634],{"class":1232}," mongoengine",[1095,1636,1637],{"class":1232}," django-cors-headers\n",[1095,1639,1640],{"class":1097,"line":1133},[1095,1641,1210],{"emptyLinePlaceholder":1209},[1095,1643,1644],{"class":1097,"line":1167},[1095,1645,1646],{"class":1101},"# Alternative: Use MongoEngine (recommended)\n",[1095,1648,1649,1651,1653],{"class":1097,"line":1185},[1095,1650,1622],{"class":1120},[1095,1652,1625],{"class":1232},[1095,1654,1655],{"class":1232}," mongoengine\n",[1085,1657,1659],{"className":1087,"code":1658,"language":1089,"meta":1090,"style":1090},"# settings.py\nimport os\nfrom decouple import config\n\n# MongoDB Configuration with MongoEngine\nimport mongoengine\n\nMONGODB_SETTINGS = {\n    'db': config('MONGODB_DB', default='user_service_db'),\n    'host': config('MONGODB_HOST', default='localhost'),\n    'port': config('MONGODB_PORT', default=27017, cast=int),\n    'username': config('MONGODB_USERNAME', default=''),\n    'password': config('MONGODB_PASSWORD', default=''),\n    'authentication_source': config('MONGODB_AUTH_SOURCE', default='admin'),\n    'connect': False,  # Important for multiprocessing\n}\n\n# Connect to MongoDB\nmongoengine.connect(**MONGODB_SETTINGS)\n\n# Alternative: Direct PyMongo connection\nDATABASES = {\n    'default': {\n        'ENGINE': 'djongo',\n        'NAME': config('MONGODB_DB', default='user_service_db'),\n        'CLIENT': {\n            'host': config('MONGODB_URI', default='mongodb://localhost:27017'),\n            'username': config('MONGODB_USERNAME', default=''),\n            'password': config('MONGODB_PASSWORD', default=''),\n            'authSource': config('MONGODB_AUTH_SOURCE', default='admin'),\n            'authMechanism': 'SCRAM-SHA-1',\n        }\n    }\n}\n",[1092,1660,1661,1666,1675,1688,1692,1697,1703,1707,1718,1759,1796,1840,1872,1904,1941,1960,1964,1968,1973,1993,1997,2002,2011,2024,2046,2081,2094,2131,2161,2192,2228,2249,2255,2261],{"__ignoreMap":1090},[1095,1662,1663],{"class":1097,"line":1098},[1095,1664,1665],{"class":1101},"# settings.py\n",[1095,1667,1668,1672],{"class":1097,"line":1105},[1095,1669,1671],{"class":1670},"siDh9","import",[1095,1673,1674],{"class":1136}," os\n",[1095,1676,1677,1680,1683,1685],{"class":1097,"line":1133},[1095,1678,1679],{"class":1670},"from",[1095,1681,1682],{"class":1136}," decouple ",[1095,1684,1671],{"class":1670},[1095,1686,1687],{"class":1136}," config\n",[1095,1689,1690],{"class":1097,"line":1167},[1095,1691,1210],{"emptyLinePlaceholder":1209},[1095,1693,1694],{"class":1097,"line":1185},[1095,1695,1696],{"class":1101},"# MongoDB Configuration with MongoEngine\n",[1095,1698,1699,1701],{"class":1097,"line":1206},[1095,1700,1671],{"class":1670},[1095,1702,1655],{"class":1136},[1095,1704,1705],{"class":1097,"line":1213},[1095,1706,1210],{"emptyLinePlaceholder":1209},[1095,1708,1709,1713,1716],{"class":1097,"line":1219},[1095,1710,1712],{"class":1711},"se3Ec","MONGODB_SETTINGS",[1095,1714,1715],{"class":1116}," =",[1095,1717,1313],{"class":1116},[1095,1719,1720,1723,1726,1729,1731,1734,1736,1738,1741,1743,1745,1748,1750,1752,1755,1757],{"class":1097,"line":1225},[1095,1721,1722],{"class":1228},"    '",[1095,1724,1725],{"class":1232},"db",[1095,1727,1728],{"class":1228},"'",[1095,1730,1239],{"class":1116},[1095,1732,1733],{"class":1148}," config",[1095,1735,1117],{"class":1116},[1095,1737,1728],{"class":1228},[1095,1739,1740],{"class":1232},"MONGODB_DB",[1095,1742,1728],{"class":1228},[1095,1744,1470],{"class":1116},[1095,1746,1747],{"class":1154}," default",[1095,1749,1140],{"class":1116},[1095,1751,1728],{"class":1228},[1095,1753,1754],{"class":1232},"user_service_db",[1095,1756,1728],{"class":1228},[1095,1758,1254],{"class":1116},[1095,1760,1761,1763,1766,1768,1770,1772,1774,1776,1779,1781,1783,1785,1787,1789,1792,1794],{"class":1097,"line":1257},[1095,1762,1722],{"class":1228},[1095,1764,1765],{"class":1232},"host",[1095,1767,1728],{"class":1228},[1095,1769,1239],{"class":1116},[1095,1771,1733],{"class":1148},[1095,1773,1117],{"class":1116},[1095,1775,1728],{"class":1228},[1095,1777,1778],{"class":1232},"MONGODB_HOST",[1095,1780,1728],{"class":1228},[1095,1782,1470],{"class":1116},[1095,1784,1747],{"class":1154},[1095,1786,1140],{"class":1116},[1095,1788,1728],{"class":1228},[1095,1790,1791],{"class":1232},"localhost",[1095,1793,1728],{"class":1228},[1095,1795,1254],{"class":1116},[1095,1797,1798,1800,1803,1805,1807,1809,1811,1813,1816,1818,1820,1822,1824,1827,1829,1832,1834,1838],{"class":1097,"line":1280},[1095,1799,1722],{"class":1228},[1095,1801,1802],{"class":1232},"port",[1095,1804,1728],{"class":1228},[1095,1806,1239],{"class":1116},[1095,1808,1733],{"class":1148},[1095,1810,1117],{"class":1116},[1095,1812,1728],{"class":1228},[1095,1814,1815],{"class":1232},"MONGODB_PORT",[1095,1817,1728],{"class":1228},[1095,1819,1470],{"class":1116},[1095,1821,1747],{"class":1154},[1095,1823,1140],{"class":1116},[1095,1825,1826],{"class":1160},"27017",[1095,1828,1470],{"class":1116},[1095,1830,1831],{"class":1154}," cast",[1095,1833,1140],{"class":1116},[1095,1835,1837],{"class":1836},"sa2tF","int",[1095,1839,1254],{"class":1116},[1095,1841,1842,1844,1846,1848,1850,1852,1854,1856,1859,1861,1863,1865,1867,1870],{"class":1097,"line":1301},[1095,1843,1722],{"class":1228},[1095,1845,1262],{"class":1232},[1095,1847,1728],{"class":1228},[1095,1849,1239],{"class":1116},[1095,1851,1733],{"class":1148},[1095,1853,1117],{"class":1116},[1095,1855,1728],{"class":1228},[1095,1857,1858],{"class":1232},"MONGODB_USERNAME",[1095,1860,1728],{"class":1228},[1095,1862,1470],{"class":1116},[1095,1864,1747],{"class":1154},[1095,1866,1140],{"class":1116},[1095,1868,1869],{"class":1228},"''",[1095,1871,1254],{"class":1116},[1095,1873,1874,1876,1879,1881,1883,1885,1887,1889,1892,1894,1896,1898,1900,1902],{"class":1097,"line":1316},[1095,1875,1722],{"class":1228},[1095,1877,1878],{"class":1232},"password",[1095,1880,1728],{"class":1228},[1095,1882,1239],{"class":1116},[1095,1884,1733],{"class":1148},[1095,1886,1117],{"class":1116},[1095,1888,1728],{"class":1228},[1095,1890,1891],{"class":1232},"MONGODB_PASSWORD",[1095,1893,1728],{"class":1228},[1095,1895,1470],{"class":1116},[1095,1897,1747],{"class":1154},[1095,1899,1140],{"class":1116},[1095,1901,1869],{"class":1228},[1095,1903,1254],{"class":1116},[1095,1905,1906,1908,1911,1913,1915,1917,1919,1921,1924,1926,1928,1930,1932,1934,1937,1939],{"class":1097,"line":1338},[1095,1907,1722],{"class":1228},[1095,1909,1910],{"class":1232},"authentication_source",[1095,1912,1728],{"class":1228},[1095,1914,1239],{"class":1116},[1095,1916,1733],{"class":1148},[1095,1918,1117],{"class":1116},[1095,1920,1728],{"class":1228},[1095,1922,1923],{"class":1232},"MONGODB_AUTH_SOURCE",[1095,1925,1728],{"class":1228},[1095,1927,1470],{"class":1116},[1095,1929,1747],{"class":1154},[1095,1931,1140],{"class":1116},[1095,1933,1728],{"class":1228},[1095,1935,1936],{"class":1232},"admin",[1095,1938,1728],{"class":1228},[1095,1940,1254],{"class":1116},[1095,1942,1943,1945,1948,1950,1952,1955,1957],{"class":1097,"line":1352},[1095,1944,1722],{"class":1228},[1095,1946,1947],{"class":1232},"connect",[1095,1949,1728],{"class":1228},[1095,1951,1239],{"class":1116},[1095,1953,1954],{"class":1400}," False",[1095,1956,1470],{"class":1116},[1095,1958,1959],{"class":1101},"  # Important for multiprocessing\n",[1095,1961,1962],{"class":1097,"line":1374},[1095,1963,1529],{"class":1116},[1095,1965,1966],{"class":1097,"line":1388},[1095,1967,1210],{"emptyLinePlaceholder":1209},[1095,1969,1970],{"class":1097,"line":1406},[1095,1971,1972],{"class":1101},"# Connect to MongoDB\n",[1095,1974,1975,1978,1980,1982,1984,1988,1991],{"class":1097,"line":1421},[1095,1976,1977],{"class":1136},"mongoengine",[1095,1979,1124],{"class":1116},[1095,1981,1947],{"class":1148},[1095,1983,1117],{"class":1116},[1095,1985,1987],{"class":1986},"sVsLi","**",[1095,1989,1712],{"class":1990},"s6DHA",[1095,1992,1164],{"class":1116},[1095,1994,1995],{"class":1097,"line":1427},[1095,1996,1210],{"emptyLinePlaceholder":1209},[1095,1998,1999],{"class":1097,"line":1433},[1095,2000,2001],{"class":1101},"# Alternative: Direct PyMongo connection\n",[1095,2003,2004,2007,2009],{"class":1097,"line":1448},[1095,2005,2006],{"class":1711},"DATABASES",[1095,2008,1715],{"class":1116},[1095,2010,1313],{"class":1116},[1095,2012,2013,2015,2018,2020,2022],{"class":1097,"line":1492},[1095,2014,1722],{"class":1228},[1095,2016,2017],{"class":1232},"default",[1095,2019,1728],{"class":1228},[1095,2021,1239],{"class":1116},[1095,2023,1313],{"class":1116},[1095,2025,2026,2029,2032,2034,2036,2039,2042,2044],{"class":1097,"line":1532},[1095,2027,2028],{"class":1228},"        '",[1095,2030,2031],{"class":1232},"ENGINE",[1095,2033,1728],{"class":1228},[1095,2035,1239],{"class":1116},[1095,2037,2038],{"class":1228}," '",[1095,2040,2041],{"class":1232},"djongo",[1095,2043,1728],{"class":1228},[1095,2045,1277],{"class":1116},[1095,2047,2048,2050,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079],{"class":1097,"line":1538},[1095,2049,2028],{"class":1228},[1095,2051,2052],{"class":1232},"NAME",[1095,2054,1728],{"class":1228},[1095,2056,1239],{"class":1116},[1095,2058,1733],{"class":1148},[1095,2060,1117],{"class":1116},[1095,2062,1728],{"class":1228},[1095,2064,1740],{"class":1232},[1095,2066,1728],{"class":1228},[1095,2068,1470],{"class":1116},[1095,2070,1747],{"class":1154},[1095,2072,1140],{"class":1116},[1095,2074,1728],{"class":1228},[1095,2076,1754],{"class":1232},[1095,2078,1728],{"class":1228},[1095,2080,1254],{"class":1116},[1095,2082,2083,2085,2088,2090,2092],{"class":1097,"line":1544},[1095,2084,2028],{"class":1228},[1095,2086,2087],{"class":1232},"CLIENT",[1095,2089,1728],{"class":1228},[1095,2091,1239],{"class":1116},[1095,2093,1313],{"class":1116},[1095,2095,2096,2099,2101,2103,2105,2107,2109,2111,2114,2116,2118,2120,2122,2124,2127,2129],{"class":1097,"line":1570},[1095,2097,2098],{"class":1228},"            '",[1095,2100,1765],{"class":1232},[1095,2102,1728],{"class":1228},[1095,2104,1239],{"class":1116},[1095,2106,1733],{"class":1148},[1095,2108,1117],{"class":1116},[1095,2110,1728],{"class":1228},[1095,2112,2113],{"class":1232},"MONGODB_URI",[1095,2115,1728],{"class":1228},[1095,2117,1470],{"class":1116},[1095,2119,1747],{"class":1154},[1095,2121,1140],{"class":1116},[1095,2123,1728],{"class":1228},[1095,2125,2126],{"class":1232},"mongodb://localhost:27017",[1095,2128,1728],{"class":1228},[1095,2130,1254],{"class":1116},[1095,2132,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159],{"class":1097,"line":1595},[1095,2134,2098],{"class":1228},[1095,2136,1262],{"class":1232},[1095,2138,1728],{"class":1228},[1095,2140,1239],{"class":1116},[1095,2142,1733],{"class":1148},[1095,2144,1117],{"class":1116},[1095,2146,1728],{"class":1228},[1095,2148,1858],{"class":1232},[1095,2150,1728],{"class":1228},[1095,2152,1470],{"class":1116},[1095,2154,1747],{"class":1154},[1095,2156,1140],{"class":1116},[1095,2158,1869],{"class":1228},[1095,2160,1254],{"class":1116},[1095,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190],{"class":1097,"line":2163},29,[1095,2165,2098],{"class":1228},[1095,2167,1878],{"class":1232},[1095,2169,1728],{"class":1228},[1095,2171,1239],{"class":1116},[1095,2173,1733],{"class":1148},[1095,2175,1117],{"class":1116},[1095,2177,1728],{"class":1228},[1095,2179,1891],{"class":1232},[1095,2181,1728],{"class":1228},[1095,2183,1470],{"class":1116},[1095,2185,1747],{"class":1154},[1095,2187,1140],{"class":1116},[1095,2189,1869],{"class":1228},[1095,2191,1254],{"class":1116},[1095,2193,2195,2197,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226],{"class":1097,"line":2194},30,[1095,2196,2098],{"class":1228},[1095,2198,2199],{"class":1232},"authSource",[1095,2201,1728],{"class":1228},[1095,2203,1239],{"class":1116},[1095,2205,1733],{"class":1148},[1095,2207,1117],{"class":1116},[1095,2209,1728],{"class":1228},[1095,2211,1923],{"class":1232},[1095,2213,1728],{"class":1228},[1095,2215,1470],{"class":1116},[1095,2217,1747],{"class":1154},[1095,2219,1140],{"class":1116},[1095,2221,1728],{"class":1228},[1095,2223,1936],{"class":1232},[1095,2225,1728],{"class":1228},[1095,2227,1254],{"class":1116},[1095,2229,2231,2233,2236,2238,2240,2242,2245,2247],{"class":1097,"line":2230},31,[1095,2232,2098],{"class":1228},[1095,2234,2235],{"class":1232},"authMechanism",[1095,2237,1728],{"class":1228},[1095,2239,1239],{"class":1116},[1095,2241,2038],{"class":1228},[1095,2243,2244],{"class":1232},"SCRAM-SHA-1",[1095,2246,1728],{"class":1228},[1095,2248,1277],{"class":1116},[1095,2250,2252],{"class":1097,"line":2251},32,[1095,2253,2254],{"class":1116},"        }\n",[1095,2256,2258],{"class":1097,"line":2257},33,[1095,2259,2260],{"class":1116},"    }\n",[1095,2262,2264],{"class":1097,"line":2263},34,[1095,2265,1529],{"class":1116},[1035,2267,2269],{"id":2268},"_2-mongodb-models-with-mongoengine","2. MongoDB Models with MongoEngine",[1085,2271,2273],{"className":1087,"code":2272,"language":1089,"meta":1090,"style":1090},"# models.py\nfrom mongoengine import Document, EmbeddedDocument, fields\nfrom datetime import datetime\nimport uuid\n\nclass Address(EmbeddedDocument):\n    \"\"\"Embedded document for user addresses\"\"\"\n    street = fields.StringField(max_length=200, required=True)\n    city = fields.StringField(max_length=100, required=True)\n    state = fields.StringField(max_length=50)\n    postal_code = fields.StringField(max_length=20)\n    country = fields.StringField(max_length=50, required=True)\n    is_primary = fields.BooleanField(default=False)\n\nclass SocialLink(EmbeddedDocument):\n    \"\"\"Embedded document for social media links\"\"\"\n    platform = fields.StringField(max_length=50, required=True)\n    url = fields.URLField(required=True)\n    verified = fields.BooleanField(default=False)\n\nclass UserPreferences(EmbeddedDocument):\n    \"\"\"User preferences embedded document\"\"\"\n    theme = fields.StringField(max_length=20, default='light', choices=['light', 'dark'])\n    language = fields.StringField(max_length=10, default='en')\n    timezone = fields.StringField(max_length=50, default='UTC')\n    notifications = fields.DictField(default={\n        'email': True,\n        'push': True,\n        'sms': False\n    })\n\nclass User(Document):\n    \"\"\"User document model\"\"\"\n    # Use UUID as string for consistency with other services\n    user_id = fields.StringField(primary_key=True, default=lambda: str(uuid.uuid4()))\n    username = fields.StringField(max_length=150, required=True, unique=True)\n    email = fields.EmailField(required=True, unique=True)\n    password_hash = fields.StringField(required=True)\n    \n    # Profile information\n    first_name = fields.StringField(max_length=100)\n    last_name = fields.StringField(max_length=100)\n    bio = fields.StringField(max_length=500)\n    avatar_url = fields.URLField()\n    date_of_birth = fields.DateTimeField()\n    \n    # Embedded documents\n    addresses = fields.ListField(fields.EmbeddedDocumentField(Address))\n    social_links = fields.ListField(fields.EmbeddedDocumentField(SocialLink))\n    preferences = fields.EmbeddedDocumentField(UserPreferences, default=UserPreferences)\n    \n    # Status and metadata\n    is_active = fields.BooleanField(default=True)\n    is_verified = fields.BooleanField(default=False)\n    verification_token = fields.StringField()\n    \n    # Timestamps\n    created_at = fields.DateTimeField(default=datetime.utcnow)\n    updated_at = fields.DateTimeField(default=datetime.utcnow)\n    last_login = fields.DateTimeField()\n    \n    # Indexing\n    meta = {\n        'collection': 'users',\n        'indexes': [\n            'email',\n            'username',\n            'created_at',\n            ('email', 'is_active'),\n            {\n                'fields': ['$username', '$email', '$bio'],\n                'default_language': 'english',\n                'weights': {'username': 10, 'email': 5, 'bio': 2}\n            }\n        ]\n    }\n    \n    def save(self, *args, **kwargs):\n        \"\"\"Override save to update timestamp\"\"\"\n        self.updated_at = datetime.utcnow()\n        return super().save(*args, **kwargs)\n    \n    def to_dict(self):\n        \"\"\"Convert document to dictionary\"\"\"\n        return {\n            'user_id': self.user_id,\n            'username': self.username,\n            'email': self.email,\n            'first_name': self.first_name,\n            'last_name': self.last_name,\n            'bio': self.bio,\n            'avatar_url': self.avatar_url,\n            'addresses': [addr.to_mongo().to_dict() for addr in self.addresses],\n            'social_links': [link.to_mongo().to_dict() for link in self.social_links],\n            'preferences': self.preferences.to_mongo().to_dict() if self.preferences else {},\n            'is_active': self.is_active,\n            'is_verified': self.is_verified,\n            'created_at': self.created_at.isoformat() if self.created_at else None,\n            'updated_at': self.updated_at.isoformat() if self.updated_at else None,\n            'last_login': self.last_login.isoformat() if self.last_login else None,\n        }\n\nclass UserSession(Document):\n    \"\"\"User session tracking\"\"\"\n    session_id = fields.StringField(primary_key=True, default=lambda: str(uuid.uuid4()))\n    user = fields.ReferenceField(User, required=True)\n    device_info = fields.DictField()\n    ip_address = fields.StringField()\n    user_agent = fields.StringField()\n    created_at = fields.DateTimeField(default=datetime.utcnow)\n    expires_at = fields.DateTimeField()\n    is_active = fields.BooleanField(default=True)\n    \n    meta = {\n        'collection': 'user_sessions',\n        'indexes': [\n            'user',\n            'created_at',\n            'expires_at',\n            ('user', 'is_active')\n        ]\n    }\n\nclass UserActivity(Document):\n    \"\"\"User activity logging\"\"\"\n    activity_id = fields.StringField(primary_key=True, default=lambda: str(uuid.uuid4()))\n    user = fields.ReferenceField(User, required=True)\n    action = fields.StringField(required=True)\n    resource = fields.StringField()\n    metadata = fields.DictField()\n    ip_address = fields.StringField()\n    user_agent = fields.StringField()\n    timestamp = fields.DateTimeField(default=datetime.utcnow)\n    \n    meta = {\n        'collection': 'user_activities',\n        'indexes': [\n            'user',\n            'timestamp',\n            'action',\n            ('user', 'timestamp'),\n            ('user', 'action')\n        ]\n    }\n",[1092,2274,2275,2280,2302,2314,2321,2325,2339,2352,2388,2420,2444,2468,2499,2524,2528,2541,2550,2581,2606,2629,2633,2646,2655,2714,2751,2787,2808,2822,2836,2849,2854,2858,2871,2880,2885,2935,2975,3006,3030,3036,3042,3066,3090,3115,3131,3148,3153,3159,3192,3221,3250,3255,3261,3285,3309,3325,3330,3336,3367,3395,3411,3416,3422,3432,3453,3467,3478,3489,3500,3523,3529,3572,3593,3647,3652,3657,3662,3667,3702,3713,3735,3765,3770,3784,3794,3801,3822,3841,3860,3880,3900,3919,3939,3985,4026,4068,4087,4107,4146,4183,4220,4225,4230,4244,4254,4298,4328,4344,4360,4376,4403,4419,4442,4447,4456,4476,4489,4501,4512,4524,4545,4550,4555,4560,4574,4584,4628,4655,4679,4695,4711,4726,4741,4769,4774,4783,4803,4816,4827,4839,4851,4872,4893,4898],{"__ignoreMap":1090},[1095,2276,2277],{"class":1097,"line":1098},[1095,2278,2279],{"class":1101},"# models.py\n",[1095,2281,2282,2284,2287,2289,2292,2294,2297,2299],{"class":1097,"line":1105},[1095,2283,1679],{"class":1670},[1095,2285,2286],{"class":1136}," mongoengine ",[1095,2288,1671],{"class":1670},[1095,2290,2291],{"class":1136}," Document",[1095,2293,1470],{"class":1116},[1095,2295,2296],{"class":1136}," EmbeddedDocument",[1095,2298,1470],{"class":1116},[1095,2300,2301],{"class":1136}," fields\n",[1095,2303,2304,2306,2309,2311],{"class":1097,"line":1133},[1095,2305,1679],{"class":1670},[1095,2307,2308],{"class":1136}," datetime ",[1095,2310,1671],{"class":1670},[1095,2312,2313],{"class":1136}," datetime\n",[1095,2315,2316,2318],{"class":1097,"line":1167},[1095,2317,1671],{"class":1670},[1095,2319,2320],{"class":1136}," uuid\n",[1095,2322,2323],{"class":1097,"line":1185},[1095,2324,1210],{"emptyLinePlaceholder":1209},[1095,2326,2327,2329,2332,2334,2337],{"class":1097,"line":1206},[1095,2328,1109],{"class":1108},[1095,2330,2331],{"class":1112}," Address",[1095,2333,1117],{"class":1116},[1095,2335,2336],{"class":1120},"EmbeddedDocument",[1095,2338,1130],{"class":1116},[1095,2340,2341,2345,2349],{"class":1097,"line":1213},[1095,2342,2344],{"class":2343},"sm7ve","    \"\"\"",[1095,2346,2348],{"class":2347},"sVyVU","Embedded document for user addresses",[1095,2350,2351],{"class":2343},"\"\"\"\n",[1095,2353,2354,2357,2359,2362,2364,2367,2369,2371,2373,2376,2378,2381,2383,2386],{"class":1097,"line":1219},[1095,2355,2356],{"class":1136},"    street ",[1095,2358,1140],{"class":1116},[1095,2360,2361],{"class":1136}," fields",[1095,2363,1124],{"class":1116},[1095,2365,2366],{"class":1148},"StringField",[1095,2368,1117],{"class":1116},[1095,2370,1155],{"class":1154},[1095,2372,1140],{"class":1116},[1095,2374,2375],{"class":1160},"200",[1095,2377,1470],{"class":1116},[1095,2379,2380],{"class":1154}," required",[1095,2382,1140],{"class":1116},[1095,2384,2385],{"class":1400},"True",[1095,2387,1164],{"class":1116},[1095,2389,2390,2393,2395,2397,2399,2401,2403,2405,2407,2410,2412,2414,2416,2418],{"class":1097,"line":1225},[1095,2391,2392],{"class":1136},"    city ",[1095,2394,1140],{"class":1116},[1095,2396,2361],{"class":1136},[1095,2398,1124],{"class":1116},[1095,2400,2366],{"class":1148},[1095,2402,1117],{"class":1116},[1095,2404,1155],{"class":1154},[1095,2406,1140],{"class":1116},[1095,2408,2409],{"class":1160},"100",[1095,2411,1470],{"class":1116},[1095,2413,2380],{"class":1154},[1095,2415,1140],{"class":1116},[1095,2417,2385],{"class":1400},[1095,2419,1164],{"class":1116},[1095,2421,2422,2425,2427,2429,2431,2433,2435,2437,2439,2442],{"class":1097,"line":1257},[1095,2423,2424],{"class":1136},"    state ",[1095,2426,1140],{"class":1116},[1095,2428,2361],{"class":1136},[1095,2430,1124],{"class":1116},[1095,2432,2366],{"class":1148},[1095,2434,1117],{"class":1116},[1095,2436,1155],{"class":1154},[1095,2438,1140],{"class":1116},[1095,2440,2441],{"class":1160},"50",[1095,2443,1164],{"class":1116},[1095,2445,2446,2449,2451,2453,2455,2457,2459,2461,2463,2466],{"class":1097,"line":1280},[1095,2447,2448],{"class":1136},"    postal_code ",[1095,2450,1140],{"class":1116},[1095,2452,2361],{"class":1136},[1095,2454,1124],{"class":1116},[1095,2456,2366],{"class":1148},[1095,2458,1117],{"class":1116},[1095,2460,1155],{"class":1154},[1095,2462,1140],{"class":1116},[1095,2464,2465],{"class":1160},"20",[1095,2467,1164],{"class":1116},[1095,2469,2470,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497],{"class":1097,"line":1301},[1095,2471,2472],{"class":1136},"    country ",[1095,2474,1140],{"class":1116},[1095,2476,2361],{"class":1136},[1095,2478,1124],{"class":1116},[1095,2480,2366],{"class":1148},[1095,2482,1117],{"class":1116},[1095,2484,1155],{"class":1154},[1095,2486,1140],{"class":1116},[1095,2488,2441],{"class":1160},[1095,2490,1470],{"class":1116},[1095,2492,2380],{"class":1154},[1095,2494,1140],{"class":1116},[1095,2496,2385],{"class":1400},[1095,2498,1164],{"class":1116},[1095,2500,2501,2504,2506,2508,2510,2513,2515,2517,2519,2522],{"class":1097,"line":1316},[1095,2502,2503],{"class":1136},"    is_primary ",[1095,2505,1140],{"class":1116},[1095,2507,2361],{"class":1136},[1095,2509,1124],{"class":1116},[1095,2511,2512],{"class":1148},"BooleanField",[1095,2514,1117],{"class":1116},[1095,2516,2017],{"class":1154},[1095,2518,1140],{"class":1116},[1095,2520,2521],{"class":1400},"False",[1095,2523,1164],{"class":1116},[1095,2525,2526],{"class":1097,"line":1338},[1095,2527,1210],{"emptyLinePlaceholder":1209},[1095,2529,2530,2532,2535,2537,2539],{"class":1097,"line":1352},[1095,2531,1109],{"class":1108},[1095,2533,2534],{"class":1112}," SocialLink",[1095,2536,1117],{"class":1116},[1095,2538,2336],{"class":1120},[1095,2540,1130],{"class":1116},[1095,2542,2543,2545,2548],{"class":1097,"line":1374},[1095,2544,2344],{"class":2343},[1095,2546,2547],{"class":2347},"Embedded document for social media links",[1095,2549,2351],{"class":2343},[1095,2551,2552,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579],{"class":1097,"line":1388},[1095,2553,2554],{"class":1136},"    platform ",[1095,2556,1140],{"class":1116},[1095,2558,2361],{"class":1136},[1095,2560,1124],{"class":1116},[1095,2562,2366],{"class":1148},[1095,2564,1117],{"class":1116},[1095,2566,1155],{"class":1154},[1095,2568,1140],{"class":1116},[1095,2570,2441],{"class":1160},[1095,2572,1470],{"class":1116},[1095,2574,2380],{"class":1154},[1095,2576,1140],{"class":1116},[1095,2578,2385],{"class":1400},[1095,2580,1164],{"class":1116},[1095,2582,2583,2586,2588,2590,2592,2595,2597,2600,2602,2604],{"class":1097,"line":1406},[1095,2584,2585],{"class":1136},"    url ",[1095,2587,1140],{"class":1116},[1095,2589,2361],{"class":1136},[1095,2591,1124],{"class":1116},[1095,2593,2594],{"class":1148},"URLField",[1095,2596,1117],{"class":1116},[1095,2598,2599],{"class":1154},"required",[1095,2601,1140],{"class":1116},[1095,2603,2385],{"class":1400},[1095,2605,1164],{"class":1116},[1095,2607,2608,2611,2613,2615,2617,2619,2621,2623,2625,2627],{"class":1097,"line":1421},[1095,2609,2610],{"class":1136},"    verified ",[1095,2612,1140],{"class":1116},[1095,2614,2361],{"class":1136},[1095,2616,1124],{"class":1116},[1095,2618,2512],{"class":1148},[1095,2620,1117],{"class":1116},[1095,2622,2017],{"class":1154},[1095,2624,1140],{"class":1116},[1095,2626,2521],{"class":1400},[1095,2628,1164],{"class":1116},[1095,2630,2631],{"class":1097,"line":1427},[1095,2632,1210],{"emptyLinePlaceholder":1209},[1095,2634,2635,2637,2640,2642,2644],{"class":1097,"line":1433},[1095,2636,1109],{"class":1108},[1095,2638,2639],{"class":1112}," UserPreferences",[1095,2641,1117],{"class":1116},[1095,2643,2336],{"class":1120},[1095,2645,1130],{"class":1116},[1095,2647,2648,2650,2653],{"class":1097,"line":1448},[1095,2649,2344],{"class":2343},[1095,2651,2652],{"class":2347},"User preferences embedded document",[1095,2654,2351],{"class":2343},[1095,2656,2657,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2687,2689,2691,2694,2697,2699,2701,2703,2705,2707,2709,2711],{"class":1097,"line":1492},[1095,2658,2659],{"class":1136},"    theme ",[1095,2661,1140],{"class":1116},[1095,2663,2361],{"class":1136},[1095,2665,1124],{"class":1116},[1095,2667,2366],{"class":1148},[1095,2669,1117],{"class":1116},[1095,2671,1155],{"class":1154},[1095,2673,1140],{"class":1116},[1095,2675,2465],{"class":1160},[1095,2677,1470],{"class":1116},[1095,2679,1747],{"class":1154},[1095,2681,1140],{"class":1116},[1095,2683,1728],{"class":1228},[1095,2685,2686],{"class":1232},"light",[1095,2688,1728],{"class":1228},[1095,2690,1470],{"class":1116},[1095,2692,2693],{"class":1154}," choices",[1095,2695,2696],{"class":1116},"=[",[1095,2698,1728],{"class":1228},[1095,2700,2686],{"class":1232},[1095,2702,1728],{"class":1228},[1095,2704,1470],{"class":1116},[1095,2706,2038],{"class":1228},[1095,2708,1367],{"class":1232},[1095,2710,1728],{"class":1228},[1095,2712,2713],{"class":1116},"])\n",[1095,2715,2716,2719,2721,2723,2725,2727,2729,2731,2733,2736,2738,2740,2742,2744,2747,2749],{"class":1097,"line":1532},[1095,2717,2718],{"class":1136},"    language ",[1095,2720,1140],{"class":1116},[1095,2722,2361],{"class":1136},[1095,2724,1124],{"class":1116},[1095,2726,2366],{"class":1148},[1095,2728,1117],{"class":1116},[1095,2730,1155],{"class":1154},[1095,2732,1140],{"class":1116},[1095,2734,2735],{"class":1160},"10",[1095,2737,1470],{"class":1116},[1095,2739,1747],{"class":1154},[1095,2741,1140],{"class":1116},[1095,2743,1728],{"class":1228},[1095,2745,2746],{"class":1232},"en",[1095,2748,1728],{"class":1228},[1095,2750,1164],{"class":1116},[1095,2752,2753,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2783,2785],{"class":1097,"line":1538},[1095,2754,2755],{"class":1136},"    timezone ",[1095,2757,1140],{"class":1116},[1095,2759,2361],{"class":1136},[1095,2761,1124],{"class":1116},[1095,2763,2366],{"class":1148},[1095,2765,1117],{"class":1116},[1095,2767,1155],{"class":1154},[1095,2769,1140],{"class":1116},[1095,2771,2441],{"class":1160},[1095,2773,1470],{"class":1116},[1095,2775,1747],{"class":1154},[1095,2777,1140],{"class":1116},[1095,2779,1728],{"class":1228},[1095,2781,2782],{"class":1232},"UTC",[1095,2784,1728],{"class":1228},[1095,2786,1164],{"class":1116},[1095,2788,2789,2792,2794,2796,2798,2801,2803,2805],{"class":1097,"line":1544},[1095,2790,2791],{"class":1136},"    notifications ",[1095,2793,1140],{"class":1116},[1095,2795,2361],{"class":1136},[1095,2797,1124],{"class":1116},[1095,2799,2800],{"class":1148},"DictField",[1095,2802,1117],{"class":1116},[1095,2804,2017],{"class":1154},[1095,2806,2807],{"class":1116},"={\n",[1095,2809,2810,2812,2814,2816,2818,2820],{"class":1097,"line":1570},[1095,2811,2028],{"class":1228},[1095,2813,1285],{"class":1232},[1095,2815,1728],{"class":1228},[1095,2817,1239],{"class":1116},[1095,2819,1401],{"class":1400},[1095,2821,1277],{"class":1116},[1095,2823,2824,2826,2828,2830,2832,2834],{"class":1097,"line":1595},[1095,2825,2028],{"class":1228},[1095,2827,1411],{"class":1232},[1095,2829,1728],{"class":1228},[1095,2831,1239],{"class":1116},[1095,2833,1401],{"class":1400},[1095,2835,1277],{"class":1116},[1095,2837,2838,2840,2843,2845,2847],{"class":1097,"line":2163},[1095,2839,2028],{"class":1228},[1095,2841,2842],{"class":1232},"sms",[1095,2844,1728],{"class":1228},[1095,2846,1239],{"class":1116},[1095,2848,1418],{"class":1400},[1095,2850,2851],{"class":1097,"line":2194},[1095,2852,2853],{"class":1116},"    })\n",[1095,2855,2856],{"class":1097,"line":2230},[1095,2857,1210],{"emptyLinePlaceholder":1209},[1095,2859,2860,2862,2864,2866,2869],{"class":1097,"line":2251},[1095,2861,1109],{"class":1108},[1095,2863,1113],{"class":1112},[1095,2865,1117],{"class":1116},[1095,2867,2868],{"class":1120},"Document",[1095,2870,1130],{"class":1116},[1095,2872,2873,2875,2878],{"class":1097,"line":2257},[1095,2874,2344],{"class":2343},[1095,2876,2877],{"class":2347},"User document model",[1095,2879,2351],{"class":2343},[1095,2881,2882],{"class":1097,"line":2263},[1095,2883,2884],{"class":1101},"    # Use UUID as string for consistency with other services\n",[1095,2886,2888,2891,2893,2895,2897,2899,2901,2904,2906,2908,2910,2912,2914,2917,2919,2922,2924,2927,2929,2932],{"class":1097,"line":2887},35,[1095,2889,2890],{"class":1136},"    user_id ",[1095,2892,1140],{"class":1116},[1095,2894,2361],{"class":1136},[1095,2896,1124],{"class":1116},[1095,2898,2366],{"class":1148},[1095,2900,1117],{"class":1116},[1095,2902,2903],{"class":1154},"primary_key",[1095,2905,1140],{"class":1116},[1095,2907,2385],{"class":1400},[1095,2909,1470],{"class":1116},[1095,2911,1747],{"class":1154},[1095,2913,1140],{"class":1116},[1095,2915,2916],{"class":1108},"lambda",[1095,2918,1239],{"class":1116},[1095,2920,2921],{"class":1836}," str",[1095,2923,1117],{"class":1116},[1095,2925,2926],{"class":1148},"uuid",[1095,2928,1124],{"class":1116},[1095,2930,2931],{"class":1148},"uuid4",[1095,2933,2934],{"class":1116},"()))\n",[1095,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2969,2971,2973],{"class":1097,"line":2937},36,[1095,2939,1137],{"class":1136},[1095,2941,1140],{"class":1116},[1095,2943,2361],{"class":1136},[1095,2945,1124],{"class":1116},[1095,2947,2366],{"class":1148},[1095,2949,1117],{"class":1116},[1095,2951,1155],{"class":1154},[1095,2953,1140],{"class":1116},[1095,2955,1161],{"class":1160},[1095,2957,1470],{"class":1116},[1095,2959,2380],{"class":1154},[1095,2961,1140],{"class":1116},[1095,2963,2385],{"class":1400},[1095,2965,1470],{"class":1116},[1095,2967,2968],{"class":1154}," unique",[1095,2970,1140],{"class":1116},[1095,2972,2385],{"class":1400},[1095,2974,1164],{"class":1116},[1095,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004],{"class":1097,"line":2977},37,[1095,2979,1170],{"class":1136},[1095,2981,1140],{"class":1116},[1095,2983,2361],{"class":1136},[1095,2985,1124],{"class":1116},[1095,2987,1179],{"class":1148},[1095,2989,1117],{"class":1116},[1095,2991,2599],{"class":1154},[1095,2993,1140],{"class":1116},[1095,2995,2385],{"class":1400},[1095,2997,1470],{"class":1116},[1095,2999,2968],{"class":1154},[1095,3001,1140],{"class":1116},[1095,3003,2385],{"class":1400},[1095,3005,1164],{"class":1116},[1095,3007,3009,3012,3014,3016,3018,3020,3022,3024,3026,3028],{"class":1097,"line":3008},38,[1095,3010,3011],{"class":1136},"    password_hash ",[1095,3013,1140],{"class":1116},[1095,3015,2361],{"class":1136},[1095,3017,1124],{"class":1116},[1095,3019,2366],{"class":1148},[1095,3021,1117],{"class":1116},[1095,3023,2599],{"class":1154},[1095,3025,1140],{"class":1116},[1095,3027,2385],{"class":1400},[1095,3029,1164],{"class":1116},[1095,3031,3033],{"class":1097,"line":3032},39,[1095,3034,3035],{"class":1136},"    \n",[1095,3037,3039],{"class":1097,"line":3038},40,[1095,3040,3041],{"class":1101},"    # Profile information\n",[1095,3043,3045,3048,3050,3052,3054,3056,3058,3060,3062,3064],{"class":1097,"line":3044},41,[1095,3046,3047],{"class":1136},"    first_name ",[1095,3049,1140],{"class":1116},[1095,3051,2361],{"class":1136},[1095,3053,1124],{"class":1116},[1095,3055,2366],{"class":1148},[1095,3057,1117],{"class":1116},[1095,3059,1155],{"class":1154},[1095,3061,1140],{"class":1116},[1095,3063,2409],{"class":1160},[1095,3065,1164],{"class":1116},[1095,3067,3069,3072,3074,3076,3078,3080,3082,3084,3086,3088],{"class":1097,"line":3068},42,[1095,3070,3071],{"class":1136},"    last_name ",[1095,3073,1140],{"class":1116},[1095,3075,2361],{"class":1136},[1095,3077,1124],{"class":1116},[1095,3079,2366],{"class":1148},[1095,3081,1117],{"class":1116},[1095,3083,1155],{"class":1154},[1095,3085,1140],{"class":1116},[1095,3087,2409],{"class":1160},[1095,3089,1164],{"class":1116},[1095,3091,3093,3096,3098,3100,3102,3104,3106,3108,3110,3113],{"class":1097,"line":3092},43,[1095,3094,3095],{"class":1136},"    bio ",[1095,3097,1140],{"class":1116},[1095,3099,2361],{"class":1136},[1095,3101,1124],{"class":1116},[1095,3103,2366],{"class":1148},[1095,3105,1117],{"class":1116},[1095,3107,1155],{"class":1154},[1095,3109,1140],{"class":1116},[1095,3111,3112],{"class":1160},"500",[1095,3114,1164],{"class":1116},[1095,3116,3118,3121,3123,3125,3127,3129],{"class":1097,"line":3117},44,[1095,3119,3120],{"class":1136},"    avatar_url ",[1095,3122,1140],{"class":1116},[1095,3124,2361],{"class":1136},[1095,3126,1124],{"class":1116},[1095,3128,2594],{"class":1148},[1095,3130,1182],{"class":1116},[1095,3132,3134,3137,3139,3141,3143,3146],{"class":1097,"line":3133},45,[1095,3135,3136],{"class":1136},"    date_of_birth ",[1095,3138,1140],{"class":1116},[1095,3140,2361],{"class":1136},[1095,3142,1124],{"class":1116},[1095,3144,3145],{"class":1148},"DateTimeField",[1095,3147,1182],{"class":1116},[1095,3149,3151],{"class":1097,"line":3150},46,[1095,3152,3035],{"class":1136},[1095,3154,3156],{"class":1097,"line":3155},47,[1095,3157,3158],{"class":1101},"    # Embedded documents\n",[1095,3160,3162,3165,3167,3169,3171,3174,3176,3179,3181,3184,3186,3189],{"class":1097,"line":3161},48,[1095,3163,3164],{"class":1136},"    addresses ",[1095,3166,1140],{"class":1116},[1095,3168,2361],{"class":1136},[1095,3170,1124],{"class":1116},[1095,3172,3173],{"class":1148},"ListField",[1095,3175,1117],{"class":1116},[1095,3177,3178],{"class":1148},"fields",[1095,3180,1124],{"class":1116},[1095,3182,3183],{"class":1148},"EmbeddedDocumentField",[1095,3185,1117],{"class":1116},[1095,3187,3188],{"class":1148},"Address",[1095,3190,3191],{"class":1116},"))\n",[1095,3193,3195,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3219],{"class":1097,"line":3194},49,[1095,3196,3197],{"class":1136},"    social_links ",[1095,3199,1140],{"class":1116},[1095,3201,2361],{"class":1136},[1095,3203,1124],{"class":1116},[1095,3205,3173],{"class":1148},[1095,3207,1117],{"class":1116},[1095,3209,3178],{"class":1148},[1095,3211,1124],{"class":1116},[1095,3213,3183],{"class":1148},[1095,3215,1117],{"class":1116},[1095,3217,3218],{"class":1148},"SocialLink",[1095,3220,3191],{"class":1116},[1095,3222,3224,3227,3229,3231,3233,3235,3237,3240,3242,3244,3246,3248],{"class":1097,"line":3223},50,[1095,3225,3226],{"class":1136},"    preferences ",[1095,3228,1140],{"class":1116},[1095,3230,2361],{"class":1136},[1095,3232,1124],{"class":1116},[1095,3234,3183],{"class":1148},[1095,3236,1117],{"class":1116},[1095,3238,3239],{"class":1148},"UserPreferences",[1095,3241,1470],{"class":1116},[1095,3243,1747],{"class":1154},[1095,3245,1140],{"class":1116},[1095,3247,3239],{"class":1148},[1095,3249,1164],{"class":1116},[1095,3251,3253],{"class":1097,"line":3252},51,[1095,3254,3035],{"class":1136},[1095,3256,3258],{"class":1097,"line":3257},52,[1095,3259,3260],{"class":1101},"    # Status and metadata\n",[1095,3262,3264,3267,3269,3271,3273,3275,3277,3279,3281,3283],{"class":1097,"line":3263},53,[1095,3265,3266],{"class":1136},"    is_active ",[1095,3268,1140],{"class":1116},[1095,3270,2361],{"class":1136},[1095,3272,1124],{"class":1116},[1095,3274,2512],{"class":1148},[1095,3276,1117],{"class":1116},[1095,3278,2017],{"class":1154},[1095,3280,1140],{"class":1116},[1095,3282,2385],{"class":1400},[1095,3284,1164],{"class":1116},[1095,3286,3288,3291,3293,3295,3297,3299,3301,3303,3305,3307],{"class":1097,"line":3287},54,[1095,3289,3290],{"class":1136},"    is_verified ",[1095,3292,1140],{"class":1116},[1095,3294,2361],{"class":1136},[1095,3296,1124],{"class":1116},[1095,3298,2512],{"class":1148},[1095,3300,1117],{"class":1116},[1095,3302,2017],{"class":1154},[1095,3304,1140],{"class":1116},[1095,3306,2521],{"class":1400},[1095,3308,1164],{"class":1116},[1095,3310,3312,3315,3317,3319,3321,3323],{"class":1097,"line":3311},55,[1095,3313,3314],{"class":1136},"    verification_token ",[1095,3316,1140],{"class":1116},[1095,3318,2361],{"class":1136},[1095,3320,1124],{"class":1116},[1095,3322,2366],{"class":1148},[1095,3324,1182],{"class":1116},[1095,3326,3328],{"class":1097,"line":3327},56,[1095,3329,3035],{"class":1136},[1095,3331,3333],{"class":1097,"line":3332},57,[1095,3334,3335],{"class":1101},"    # Timestamps\n",[1095,3337,3339,3342,3344,3346,3348,3350,3352,3354,3356,3359,3361,3365],{"class":1097,"line":3338},58,[1095,3340,3341],{"class":1136},"    created_at ",[1095,3343,1140],{"class":1116},[1095,3345,2361],{"class":1136},[1095,3347,1124],{"class":1116},[1095,3349,3145],{"class":1148},[1095,3351,1117],{"class":1116},[1095,3353,2017],{"class":1154},[1095,3355,1140],{"class":1116},[1095,3357,3358],{"class":1148},"datetime",[1095,3360,1124],{"class":1116},[1095,3362,3364],{"class":3363},"sBPpx","utcnow",[1095,3366,1164],{"class":1116},[1095,3368,3370,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393],{"class":1097,"line":3369},59,[1095,3371,3372],{"class":1136},"    updated_at ",[1095,3374,1140],{"class":1116},[1095,3376,2361],{"class":1136},[1095,3378,1124],{"class":1116},[1095,3380,3145],{"class":1148},[1095,3382,1117],{"class":1116},[1095,3384,2017],{"class":1154},[1095,3386,1140],{"class":1116},[1095,3388,3358],{"class":1148},[1095,3390,1124],{"class":1116},[1095,3392,3364],{"class":3363},[1095,3394,1164],{"class":1116},[1095,3396,3398,3401,3403,3405,3407,3409],{"class":1097,"line":3397},60,[1095,3399,3400],{"class":1136},"    last_login ",[1095,3402,1140],{"class":1116},[1095,3404,2361],{"class":1136},[1095,3406,1124],{"class":1116},[1095,3408,3145],{"class":1148},[1095,3410,1182],{"class":1116},[1095,3412,3414],{"class":1097,"line":3413},61,[1095,3415,3035],{"class":1136},[1095,3417,3419],{"class":1097,"line":3418},62,[1095,3420,3421],{"class":1101},"    # Indexing\n",[1095,3423,3425,3428,3430],{"class":1097,"line":3424},63,[1095,3426,3427],{"class":1136},"    meta ",[1095,3429,1140],{"class":1116},[1095,3431,1313],{"class":1116},[1095,3433,3435,3437,3440,3442,3444,3446,3449,3451],{"class":1097,"line":3434},64,[1095,3436,2028],{"class":1228},[1095,3438,3439],{"class":1232},"collection",[1095,3441,1728],{"class":1228},[1095,3443,1239],{"class":1116},[1095,3445,2038],{"class":1228},[1095,3447,3448],{"class":1232},"users",[1095,3450,1728],{"class":1228},[1095,3452,1277],{"class":1116},[1095,3454,3456,3458,3461,3463,3465],{"class":1097,"line":3455},65,[1095,3457,2028],{"class":1228},[1095,3459,3460],{"class":1232},"indexes",[1095,3462,1728],{"class":1228},[1095,3464,1239],{"class":1116},[1095,3466,1445],{"class":1116},[1095,3468,3470,3472,3474,3476],{"class":1097,"line":3469},66,[1095,3471,2098],{"class":1228},[1095,3473,1285],{"class":1232},[1095,3475,1728],{"class":1228},[1095,3477,1277],{"class":1116},[1095,3479,3481,3483,3485,3487],{"class":1097,"line":3480},67,[1095,3482,2098],{"class":1228},[1095,3484,1262],{"class":1232},[1095,3486,1728],{"class":1228},[1095,3488,1277],{"class":1116},[1095,3490,3492,3494,3496,3498],{"class":1097,"line":3491},68,[1095,3493,2098],{"class":1228},[1095,3495,1549],{"class":1232},[1095,3497,1728],{"class":1228},[1095,3499,1277],{"class":1116},[1095,3501,3503,3506,3508,3510,3512,3514,3516,3519,3521],{"class":1097,"line":3502},69,[1095,3504,3505],{"class":1116},"            (",[1095,3507,1728],{"class":1228},[1095,3509,1285],{"class":1232},[1095,3511,1728],{"class":1228},[1095,3513,1470],{"class":1116},[1095,3515,2038],{"class":1228},[1095,3517,3518],{"class":1232},"is_active",[1095,3520,1728],{"class":1228},[1095,3522,1254],{"class":1116},[1095,3524,3526],{"class":1097,"line":3525},70,[1095,3527,3528],{"class":1116},"            {\n",[1095,3530,3532,3535,3537,3539,3541,3544,3546,3549,3551,3553,3555,3558,3560,3562,3564,3567,3569],{"class":1097,"line":3531},71,[1095,3533,3534],{"class":1228},"                '",[1095,3536,3178],{"class":1232},[1095,3538,1728],{"class":1228},[1095,3540,1239],{"class":1116},[1095,3542,3543],{"class":1116}," [",[1095,3545,1728],{"class":1228},[1095,3547,3548],{"class":1232},"$username",[1095,3550,1728],{"class":1228},[1095,3552,1470],{"class":1116},[1095,3554,2038],{"class":1228},[1095,3556,3557],{"class":1232},"$email",[1095,3559,1728],{"class":1228},[1095,3561,1470],{"class":1116},[1095,3563,2038],{"class":1228},[1095,3565,3566],{"class":1232},"$bio",[1095,3568,1728],{"class":1228},[1095,3570,3571],{"class":1116},"],\n",[1095,3573,3575,3577,3580,3582,3584,3586,3589,3591],{"class":1097,"line":3574},72,[1095,3576,3534],{"class":1228},[1095,3578,3579],{"class":1232},"default_language",[1095,3581,1728],{"class":1228},[1095,3583,1239],{"class":1116},[1095,3585,2038],{"class":1228},[1095,3587,3588],{"class":1232},"english",[1095,3590,1728],{"class":1228},[1095,3592,1277],{"class":1116},[1095,3594,3596,3598,3601,3603,3605,3608,3610,3612,3614,3616,3619,3621,3623,3625,3627,3629,3632,3634,3636,3638,3640,3642,3645],{"class":1097,"line":3595},73,[1095,3597,3534],{"class":1228},[1095,3599,3600],{"class":1232},"weights",[1095,3602,1728],{"class":1228},[1095,3604,1239],{"class":1116},[1095,3606,3607],{"class":1116}," {",[1095,3609,1728],{"class":1228},[1095,3611,1262],{"class":1232},[1095,3613,1728],{"class":1228},[1095,3615,1239],{"class":1116},[1095,3617,3618],{"class":1160}," 10",[1095,3620,1470],{"class":1116},[1095,3622,2038],{"class":1228},[1095,3624,1285],{"class":1232},[1095,3626,1728],{"class":1228},[1095,3628,1239],{"class":1116},[1095,3630,3631],{"class":1160}," 5",[1095,3633,1470],{"class":1116},[1095,3635,2038],{"class":1228},[1095,3637,1322],{"class":1232},[1095,3639,1728],{"class":1228},[1095,3641,1239],{"class":1116},[1095,3643,3644],{"class":1160}," 2",[1095,3646,1529],{"class":1116},[1095,3648,3650],{"class":1097,"line":3649},74,[1095,3651,1424],{"class":1116},[1095,3653,3655],{"class":1097,"line":3654},75,[1095,3656,1535],{"class":1116},[1095,3658,3660],{"class":1097,"line":3659},76,[1095,3661,2260],{"class":1116},[1095,3663,3665],{"class":1097,"line":3664},77,[1095,3666,3035],{"class":1136},[1095,3668,3670,3673,3677,3679,3683,3685,3688,3692,3694,3697,3700],{"class":1097,"line":3669},78,[1095,3671,3672],{"class":1108},"    def",[1095,3674,3676],{"class":3675},"sljsM"," save",[1095,3678,1117],{"class":1116},[1095,3680,3682],{"class":3681},"sRjD_","self",[1095,3684,1470],{"class":1116},[1095,3686,3687],{"class":1986}," *",[1095,3689,3691],{"class":3690},"sCyAa","args",[1095,3693,1470],{"class":1116},[1095,3695,3696],{"class":1986}," **",[1095,3698,3699],{"class":3690},"kwargs",[1095,3701,1130],{"class":1116},[1095,3703,3705,3708,3711],{"class":1097,"line":3704},79,[1095,3706,3707],{"class":2343},"        \"\"\"",[1095,3709,3710],{"class":2347},"Override save to update timestamp",[1095,3712,2351],{"class":2343},[1095,3714,3716,3719,3721,3724,3726,3729,3731,3733],{"class":1097,"line":3715},80,[1095,3717,3718],{"class":1711},"        self",[1095,3720,1124],{"class":1116},[1095,3722,3723],{"class":3363},"updated_at",[1095,3725,1715],{"class":1116},[1095,3727,3728],{"class":1136}," datetime",[1095,3730,1124],{"class":1116},[1095,3732,3364],{"class":1148},[1095,3734,1182],{"class":1116},[1095,3736,3738,3741,3744,3747,3750,3752,3755,3757,3759,3761,3763],{"class":1097,"line":3737},81,[1095,3739,3740],{"class":1670},"        return",[1095,3742,3743],{"class":1836}," super",[1095,3745,3746],{"class":1116},"().",[1095,3748,3749],{"class":1148},"save",[1095,3751,1117],{"class":1116},[1095,3753,3754],{"class":1986},"*",[1095,3756,3691],{"class":1148},[1095,3758,1470],{"class":1116},[1095,3760,3696],{"class":1986},[1095,3762,3699],{"class":1148},[1095,3764,1164],{"class":1116},[1095,3766,3768],{"class":1097,"line":3767},82,[1095,3769,3035],{"class":1136},[1095,3771,3773,3775,3778,3780,3782],{"class":1097,"line":3772},83,[1095,3774,3672],{"class":1108},[1095,3776,3777],{"class":3675}," to_dict",[1095,3779,1117],{"class":1116},[1095,3781,3682],{"class":3681},[1095,3783,1130],{"class":1116},[1095,3785,3787,3789,3792],{"class":1097,"line":3786},84,[1095,3788,3707],{"class":2343},[1095,3790,3791],{"class":2347},"Convert document to dictionary",[1095,3793,2351],{"class":2343},[1095,3795,3797,3799],{"class":1097,"line":3796},85,[1095,3798,3740],{"class":1670},[1095,3800,1313],{"class":1116},[1095,3802,3804,3806,3809,3811,3813,3816,3818,3820],{"class":1097,"line":3803},86,[1095,3805,2098],{"class":1228},[1095,3807,3808],{"class":1232},"user_id",[1095,3810,1728],{"class":1228},[1095,3812,1239],{"class":1116},[1095,3814,3815],{"class":1711}," self",[1095,3817,1124],{"class":1116},[1095,3819,3808],{"class":3363},[1095,3821,1277],{"class":1116},[1095,3823,3825,3827,3829,3831,3833,3835,3837,3839],{"class":1097,"line":3824},87,[1095,3826,2098],{"class":1228},[1095,3828,1262],{"class":1232},[1095,3830,1728],{"class":1228},[1095,3832,1239],{"class":1116},[1095,3834,3815],{"class":1711},[1095,3836,1124],{"class":1116},[1095,3838,1262],{"class":3363},[1095,3840,1277],{"class":1116},[1095,3842,3844,3846,3848,3850,3852,3854,3856,3858],{"class":1097,"line":3843},88,[1095,3845,2098],{"class":1228},[1095,3847,1285],{"class":1232},[1095,3849,1728],{"class":1228},[1095,3851,1239],{"class":1116},[1095,3853,3815],{"class":1711},[1095,3855,1124],{"class":1116},[1095,3857,1285],{"class":3363},[1095,3859,1277],{"class":1116},[1095,3861,3863,3865,3868,3870,3872,3874,3876,3878],{"class":1097,"line":3862},89,[1095,3864,2098],{"class":1228},[1095,3866,3867],{"class":1232},"first_name",[1095,3869,1728],{"class":1228},[1095,3871,1239],{"class":1116},[1095,3873,3815],{"class":1711},[1095,3875,1124],{"class":1116},[1095,3877,3867],{"class":3363},[1095,3879,1277],{"class":1116},[1095,3881,3883,3885,3888,3890,3892,3894,3896,3898],{"class":1097,"line":3882},90,[1095,3884,2098],{"class":1228},[1095,3886,3887],{"class":1232},"last_name",[1095,3889,1728],{"class":1228},[1095,3891,1239],{"class":1116},[1095,3893,3815],{"class":1711},[1095,3895,1124],{"class":1116},[1095,3897,3887],{"class":3363},[1095,3899,1277],{"class":1116},[1095,3901,3903,3905,3907,3909,3911,3913,3915,3917],{"class":1097,"line":3902},91,[1095,3904,2098],{"class":1228},[1095,3906,1322],{"class":1232},[1095,3908,1728],{"class":1228},[1095,3910,1239],{"class":1116},[1095,3912,3815],{"class":1711},[1095,3914,1124],{"class":1116},[1095,3916,1322],{"class":3363},[1095,3918,1277],{"class":1116},[1095,3920,3922,3924,3927,3929,3931,3933,3935,3937],{"class":1097,"line":3921},92,[1095,3923,2098],{"class":1228},[1095,3925,3926],{"class":1232},"avatar_url",[1095,3928,1728],{"class":1228},[1095,3930,1239],{"class":1116},[1095,3932,3815],{"class":1711},[1095,3934,1124],{"class":1116},[1095,3936,3926],{"class":3363},[1095,3938,1277],{"class":1116},[1095,3940,3942,3944,3947,3949,3951,3953,3956,3958,3961,3963,3966,3968,3971,3974,3977,3979,3981,3983],{"class":1097,"line":3941},93,[1095,3943,2098],{"class":1228},[1095,3945,3946],{"class":1232},"addresses",[1095,3948,1728],{"class":1228},[1095,3950,1239],{"class":1116},[1095,3952,3543],{"class":1116},[1095,3954,3955],{"class":1136},"addr",[1095,3957,1124],{"class":1116},[1095,3959,3960],{"class":1148},"to_mongo",[1095,3962,3746],{"class":1116},[1095,3964,3965],{"class":1148},"to_dict",[1095,3967,1200],{"class":1116},[1095,3969,3970],{"class":1670}," for",[1095,3972,3973],{"class":1136}," addr ",[1095,3975,3976],{"class":1670},"in",[1095,3978,3815],{"class":1711},[1095,3980,1124],{"class":1116},[1095,3982,3946],{"class":3363},[1095,3984,3571],{"class":1116},[1095,3986,3988,3990,3992,3994,3996,3998,4001,4003,4005,4007,4009,4011,4013,4016,4018,4020,4022,4024],{"class":1097,"line":3987},94,[1095,3989,2098],{"class":1228},[1095,3991,1438],{"class":1232},[1095,3993,1728],{"class":1228},[1095,3995,1239],{"class":1116},[1095,3997,3543],{"class":1116},[1095,3999,4000],{"class":1136},"link",[1095,4002,1124],{"class":1116},[1095,4004,3960],{"class":1148},[1095,4006,3746],{"class":1116},[1095,4008,3965],{"class":1148},[1095,4010,1200],{"class":1116},[1095,4012,3970],{"class":1670},[1095,4014,4015],{"class":1136}," link ",[1095,4017,3976],{"class":1670},[1095,4019,3815],{"class":1711},[1095,4021,1124],{"class":1116},[1095,4023,1438],{"class":3363},[1095,4025,3571],{"class":1116},[1095,4027,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4056,4058,4060,4062,4065],{"class":1097,"line":4028},95,[1095,4030,2098],{"class":1228},[1095,4032,1343],{"class":1232},[1095,4034,1728],{"class":1228},[1095,4036,1239],{"class":1116},[1095,4038,3815],{"class":1711},[1095,4040,1124],{"class":1116},[1095,4042,1343],{"class":3363},[1095,4044,1124],{"class":1116},[1095,4046,3960],{"class":1148},[1095,4048,3746],{"class":1116},[1095,4050,3965],{"class":1148},[1095,4052,1200],{"class":1116},[1095,4054,4055],{"class":1670}," if",[1095,4057,3815],{"class":1711},[1095,4059,1124],{"class":1116},[1095,4061,1343],{"class":3363},[1095,4063,4064],{"class":1670}," else",[1095,4066,4067],{"class":1116}," {},\n",[1095,4069,4071,4073,4075,4077,4079,4081,4083,4085],{"class":1097,"line":4070},96,[1095,4072,2098],{"class":1228},[1095,4074,3518],{"class":1232},[1095,4076,1728],{"class":1228},[1095,4078,1239],{"class":1116},[1095,4080,3815],{"class":1711},[1095,4082,1124],{"class":1116},[1095,4084,3518],{"class":3363},[1095,4086,1277],{"class":1116},[1095,4088,4090,4092,4095,4097,4099,4101,4103,4105],{"class":1097,"line":4089},97,[1095,4091,2098],{"class":1228},[1095,4093,4094],{"class":1232},"is_verified",[1095,4096,1728],{"class":1228},[1095,4098,1239],{"class":1116},[1095,4100,3815],{"class":1711},[1095,4102,1124],{"class":1116},[1095,4104,4094],{"class":3363},[1095,4106,1277],{"class":1116},[1095,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4129,4131,4133,4135,4137,4139,4141,4144],{"class":1097,"line":4109},98,[1095,4111,2098],{"class":1228},[1095,4113,1549],{"class":1232},[1095,4115,1728],{"class":1228},[1095,4117,1239],{"class":1116},[1095,4119,3815],{"class":1711},[1095,4121,1124],{"class":1116},[1095,4123,1549],{"class":3363},[1095,4125,1124],{"class":1116},[1095,4127,4128],{"class":1148},"isoformat",[1095,4130,1200],{"class":1116},[1095,4132,4055],{"class":1670},[1095,4134,3815],{"class":1711},[1095,4136,1124],{"class":1116},[1095,4138,1549],{"class":3363},[1095,4140,4064],{"class":1670},[1095,4142,4143],{"class":1400}," None",[1095,4145,1277],{"class":1116},[1095,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177,4179,4181],{"class":1097,"line":4148},99,[1095,4150,2098],{"class":1228},[1095,4152,3723],{"class":1232},[1095,4154,1728],{"class":1228},[1095,4156,1239],{"class":1116},[1095,4158,3815],{"class":1711},[1095,4160,1124],{"class":1116},[1095,4162,3723],{"class":3363},[1095,4164,1124],{"class":1116},[1095,4166,4128],{"class":1148},[1095,4168,1200],{"class":1116},[1095,4170,4055],{"class":1670},[1095,4172,3815],{"class":1711},[1095,4174,1124],{"class":1116},[1095,4176,3723],{"class":3363},[1095,4178,4064],{"class":1670},[1095,4180,4143],{"class":1400},[1095,4182,1277],{"class":1116},[1095,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206,4208,4210,4212,4214,4216,4218],{"class":1097,"line":4185},100,[1095,4187,2098],{"class":1228},[1095,4189,1575],{"class":1232},[1095,4191,1728],{"class":1228},[1095,4193,1239],{"class":1116},[1095,4195,3815],{"class":1711},[1095,4197,1124],{"class":1116},[1095,4199,1575],{"class":3363},[1095,4201,1124],{"class":1116},[1095,4203,4128],{"class":1148},[1095,4205,1200],{"class":1116},[1095,4207,4055],{"class":1670},[1095,4209,3815],{"class":1711},[1095,4211,1124],{"class":1116},[1095,4213,1575],{"class":3363},[1095,4215,4064],{"class":1670},[1095,4217,4143],{"class":1400},[1095,4219,1277],{"class":1116},[1095,4221,4223],{"class":1097,"line":4222},101,[1095,4224,2254],{"class":1116},[1095,4226,4228],{"class":1097,"line":4227},102,[1095,4229,1210],{"emptyLinePlaceholder":1209},[1095,4231,4233,4235,4238,4240,4242],{"class":1097,"line":4232},103,[1095,4234,1109],{"class":1108},[1095,4236,4237],{"class":1112}," UserSession",[1095,4239,1117],{"class":1116},[1095,4241,2868],{"class":1120},[1095,4243,1130],{"class":1116},[1095,4245,4247,4249,4252],{"class":1097,"line":4246},104,[1095,4248,2344],{"class":2343},[1095,4250,4251],{"class":2347},"User session tracking",[1095,4253,2351],{"class":2343},[1095,4255,4257,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286,4288,4290,4292,4294,4296],{"class":1097,"line":4256},105,[1095,4258,4259],{"class":1136},"    session_id ",[1095,4261,1140],{"class":1116},[1095,4263,2361],{"class":1136},[1095,4265,1124],{"class":1116},[1095,4267,2366],{"class":1148},[1095,4269,1117],{"class":1116},[1095,4271,2903],{"class":1154},[1095,4273,1140],{"class":1116},[1095,4275,2385],{"class":1400},[1095,4277,1470],{"class":1116},[1095,4279,1747],{"class":1154},[1095,4281,1140],{"class":1116},[1095,4283,2916],{"class":1108},[1095,4285,1239],{"class":1116},[1095,4287,2921],{"class":1836},[1095,4289,1117],{"class":1116},[1095,4291,2926],{"class":1148},[1095,4293,1124],{"class":1116},[1095,4295,2931],{"class":1148},[1095,4297,2934],{"class":1116},[1095,4299,4301,4304,4306,4308,4310,4313,4315,4318,4320,4322,4324,4326],{"class":1097,"line":4300},106,[1095,4302,4303],{"class":1136},"    user ",[1095,4305,1140],{"class":1116},[1095,4307,2361],{"class":1136},[1095,4309,1124],{"class":1116},[1095,4311,4312],{"class":1148},"ReferenceField",[1095,4314,1117],{"class":1116},[1095,4316,4317],{"class":1148},"User",[1095,4319,1470],{"class":1116},[1095,4321,2380],{"class":1154},[1095,4323,1140],{"class":1116},[1095,4325,2385],{"class":1400},[1095,4327,1164],{"class":1116},[1095,4329,4331,4334,4336,4338,4340,4342],{"class":1097,"line":4330},107,[1095,4332,4333],{"class":1136},"    device_info ",[1095,4335,1140],{"class":1116},[1095,4337,2361],{"class":1136},[1095,4339,1124],{"class":1116},[1095,4341,2800],{"class":1148},[1095,4343,1182],{"class":1116},[1095,4345,4347,4350,4352,4354,4356,4358],{"class":1097,"line":4346},108,[1095,4348,4349],{"class":1136},"    ip_address ",[1095,4351,1140],{"class":1116},[1095,4353,2361],{"class":1136},[1095,4355,1124],{"class":1116},[1095,4357,2366],{"class":1148},[1095,4359,1182],{"class":1116},[1095,4361,4363,4366,4368,4370,4372,4374],{"class":1097,"line":4362},109,[1095,4364,4365],{"class":1136},"    user_agent ",[1095,4367,1140],{"class":1116},[1095,4369,2361],{"class":1136},[1095,4371,1124],{"class":1116},[1095,4373,2366],{"class":1148},[1095,4375,1182],{"class":1116},[1095,4377,4379,4381,4383,4385,4387,4389,4391,4393,4395,4397,4399,4401],{"class":1097,"line":4378},110,[1095,4380,3341],{"class":1136},[1095,4382,1140],{"class":1116},[1095,4384,2361],{"class":1136},[1095,4386,1124],{"class":1116},[1095,4388,3145],{"class":1148},[1095,4390,1117],{"class":1116},[1095,4392,2017],{"class":1154},[1095,4394,1140],{"class":1116},[1095,4396,3358],{"class":1148},[1095,4398,1124],{"class":1116},[1095,4400,3364],{"class":3363},[1095,4402,1164],{"class":1116},[1095,4404,4406,4409,4411,4413,4415,4417],{"class":1097,"line":4405},111,[1095,4407,4408],{"class":1136},"    expires_at ",[1095,4410,1140],{"class":1116},[1095,4412,2361],{"class":1136},[1095,4414,1124],{"class":1116},[1095,4416,3145],{"class":1148},[1095,4418,1182],{"class":1116},[1095,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440],{"class":1097,"line":4421},112,[1095,4423,3266],{"class":1136},[1095,4425,1140],{"class":1116},[1095,4427,2361],{"class":1136},[1095,4429,1124],{"class":1116},[1095,4431,2512],{"class":1148},[1095,4433,1117],{"class":1116},[1095,4435,2017],{"class":1154},[1095,4437,1140],{"class":1116},[1095,4439,2385],{"class":1400},[1095,4441,1164],{"class":1116},[1095,4443,4445],{"class":1097,"line":4444},113,[1095,4446,3035],{"class":1136},[1095,4448,4450,4452,4454],{"class":1097,"line":4449},114,[1095,4451,3427],{"class":1136},[1095,4453,1140],{"class":1116},[1095,4455,1313],{"class":1116},[1095,4457,4459,4461,4463,4465,4467,4469,4472,4474],{"class":1097,"line":4458},115,[1095,4460,2028],{"class":1228},[1095,4462,3439],{"class":1232},[1095,4464,1728],{"class":1228},[1095,4466,1239],{"class":1116},[1095,4468,2038],{"class":1228},[1095,4470,4471],{"class":1232},"user_sessions",[1095,4473,1728],{"class":1228},[1095,4475,1277],{"class":1116},[1095,4477,4479,4481,4483,4485,4487],{"class":1097,"line":4478},116,[1095,4480,2028],{"class":1228},[1095,4482,3460],{"class":1232},[1095,4484,1728],{"class":1228},[1095,4486,1239],{"class":1116},[1095,4488,1445],{"class":1116},[1095,4490,4492,4494,4497,4499],{"class":1097,"line":4491},117,[1095,4493,2098],{"class":1228},[1095,4495,4496],{"class":1232},"user",[1095,4498,1728],{"class":1228},[1095,4500,1277],{"class":1116},[1095,4502,4504,4506,4508,4510],{"class":1097,"line":4503},118,[1095,4505,2098],{"class":1228},[1095,4507,1549],{"class":1232},[1095,4509,1728],{"class":1228},[1095,4511,1277],{"class":1116},[1095,4513,4515,4517,4520,4522],{"class":1097,"line":4514},119,[1095,4516,2098],{"class":1228},[1095,4518,4519],{"class":1232},"expires_at",[1095,4521,1728],{"class":1228},[1095,4523,1277],{"class":1116},[1095,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543],{"class":1097,"line":4526},120,[1095,4528,3505],{"class":1116},[1095,4530,1728],{"class":1228},[1095,4532,4496],{"class":1232},[1095,4534,1728],{"class":1228},[1095,4536,1470],{"class":1116},[1095,4538,2038],{"class":1228},[1095,4540,3518],{"class":1232},[1095,4542,1728],{"class":1228},[1095,4544,1164],{"class":1116},[1095,4546,4548],{"class":1097,"line":4547},121,[1095,4549,1535],{"class":1116},[1095,4551,4553],{"class":1097,"line":4552},122,[1095,4554,2260],{"class":1116},[1095,4556,4558],{"class":1097,"line":4557},123,[1095,4559,1210],{"emptyLinePlaceholder":1209},[1095,4561,4563,4565,4568,4570,4572],{"class":1097,"line":4562},124,[1095,4564,1109],{"class":1108},[1095,4566,4567],{"class":1112}," UserActivity",[1095,4569,1117],{"class":1116},[1095,4571,2868],{"class":1120},[1095,4573,1130],{"class":1116},[1095,4575,4577,4579,4582],{"class":1097,"line":4576},125,[1095,4578,2344],{"class":2343},[1095,4580,4581],{"class":2347},"User activity logging",[1095,4583,2351],{"class":2343},[1095,4585,4587,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626],{"class":1097,"line":4586},126,[1095,4588,4589],{"class":1136},"    activity_id ",[1095,4591,1140],{"class":1116},[1095,4593,2361],{"class":1136},[1095,4595,1124],{"class":1116},[1095,4597,2366],{"class":1148},[1095,4599,1117],{"class":1116},[1095,4601,2903],{"class":1154},[1095,4603,1140],{"class":1116},[1095,4605,2385],{"class":1400},[1095,4607,1470],{"class":1116},[1095,4609,1747],{"class":1154},[1095,4611,1140],{"class":1116},[1095,4613,2916],{"class":1108},[1095,4615,1239],{"class":1116},[1095,4617,2921],{"class":1836},[1095,4619,1117],{"class":1116},[1095,4621,2926],{"class":1148},[1095,4623,1124],{"class":1116},[1095,4625,2931],{"class":1148},[1095,4627,2934],{"class":1116},[1095,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653],{"class":1097,"line":4630},127,[1095,4632,4303],{"class":1136},[1095,4634,1140],{"class":1116},[1095,4636,2361],{"class":1136},[1095,4638,1124],{"class":1116},[1095,4640,4312],{"class":1148},[1095,4642,1117],{"class":1116},[1095,4644,4317],{"class":1148},[1095,4646,1470],{"class":1116},[1095,4648,2380],{"class":1154},[1095,4650,1140],{"class":1116},[1095,4652,2385],{"class":1400},[1095,4654,1164],{"class":1116},[1095,4656,4658,4661,4663,4665,4667,4669,4671,4673,4675,4677],{"class":1097,"line":4657},128,[1095,4659,4660],{"class":1136},"    action ",[1095,4662,1140],{"class":1116},[1095,4664,2361],{"class":1136},[1095,4666,1124],{"class":1116},[1095,4668,2366],{"class":1148},[1095,4670,1117],{"class":1116},[1095,4672,2599],{"class":1154},[1095,4674,1140],{"class":1116},[1095,4676,2385],{"class":1400},[1095,4678,1164],{"class":1116},[1095,4680,4682,4685,4687,4689,4691,4693],{"class":1097,"line":4681},129,[1095,4683,4684],{"class":1136},"    resource ",[1095,4686,1140],{"class":1116},[1095,4688,2361],{"class":1136},[1095,4690,1124],{"class":1116},[1095,4692,2366],{"class":1148},[1095,4694,1182],{"class":1116},[1095,4696,4698,4701,4703,4705,4707,4709],{"class":1097,"line":4697},130,[1095,4699,4700],{"class":1136},"    metadata ",[1095,4702,1140],{"class":1116},[1095,4704,2361],{"class":1136},[1095,4706,1124],{"class":1116},[1095,4708,2800],{"class":1148},[1095,4710,1182],{"class":1116},[1095,4712,4714,4716,4718,4720,4722,4724],{"class":1097,"line":4713},131,[1095,4715,4349],{"class":1136},[1095,4717,1140],{"class":1116},[1095,4719,2361],{"class":1136},[1095,4721,1124],{"class":1116},[1095,4723,2366],{"class":1148},[1095,4725,1182],{"class":1116},[1095,4727,4729,4731,4733,4735,4737,4739],{"class":1097,"line":4728},132,[1095,4730,4365],{"class":1136},[1095,4732,1140],{"class":1116},[1095,4734,2361],{"class":1136},[1095,4736,1124],{"class":1116},[1095,4738,2366],{"class":1148},[1095,4740,1182],{"class":1116},[1095,4742,4744,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767],{"class":1097,"line":4743},133,[1095,4745,4746],{"class":1136},"    timestamp ",[1095,4748,1140],{"class":1116},[1095,4750,2361],{"class":1136},[1095,4752,1124],{"class":1116},[1095,4754,3145],{"class":1148},[1095,4756,1117],{"class":1116},[1095,4758,2017],{"class":1154},[1095,4760,1140],{"class":1116},[1095,4762,3358],{"class":1148},[1095,4764,1124],{"class":1116},[1095,4766,3364],{"class":3363},[1095,4768,1164],{"class":1116},[1095,4770,4772],{"class":1097,"line":4771},134,[1095,4773,3035],{"class":1136},[1095,4775,4777,4779,4781],{"class":1097,"line":4776},135,[1095,4778,3427],{"class":1136},[1095,4780,1140],{"class":1116},[1095,4782,1313],{"class":1116},[1095,4784,4786,4788,4790,4792,4794,4796,4799,4801],{"class":1097,"line":4785},136,[1095,4787,2028],{"class":1228},[1095,4789,3439],{"class":1232},[1095,4791,1728],{"class":1228},[1095,4793,1239],{"class":1116},[1095,4795,2038],{"class":1228},[1095,4797,4798],{"class":1232},"user_activities",[1095,4800,1728],{"class":1228},[1095,4802,1277],{"class":1116},[1095,4804,4806,4808,4810,4812,4814],{"class":1097,"line":4805},137,[1095,4807,2028],{"class":1228},[1095,4809,3460],{"class":1232},[1095,4811,1728],{"class":1228},[1095,4813,1239],{"class":1116},[1095,4815,1445],{"class":1116},[1095,4817,4819,4821,4823,4825],{"class":1097,"line":4818},138,[1095,4820,2098],{"class":1228},[1095,4822,4496],{"class":1232},[1095,4824,1728],{"class":1228},[1095,4826,1277],{"class":1116},[1095,4828,4830,4832,4835,4837],{"class":1097,"line":4829},139,[1095,4831,2098],{"class":1228},[1095,4833,4834],{"class":1232},"timestamp",[1095,4836,1728],{"class":1228},[1095,4838,1277],{"class":1116},[1095,4840,4842,4844,4847,4849],{"class":1097,"line":4841},140,[1095,4843,2098],{"class":1228},[1095,4845,4846],{"class":1232},"action",[1095,4848,1728],{"class":1228},[1095,4850,1277],{"class":1116},[1095,4852,4854,4856,4858,4860,4862,4864,4866,4868,4870],{"class":1097,"line":4853},141,[1095,4855,3505],{"class":1116},[1095,4857,1728],{"class":1228},[1095,4859,4496],{"class":1232},[1095,4861,1728],{"class":1228},[1095,4863,1470],{"class":1116},[1095,4865,2038],{"class":1228},[1095,4867,4834],{"class":1232},[1095,4869,1728],{"class":1228},[1095,4871,1254],{"class":1116},[1095,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891],{"class":1097,"line":4874},142,[1095,4876,3505],{"class":1116},[1095,4878,1728],{"class":1228},[1095,4880,4496],{"class":1232},[1095,4882,1728],{"class":1228},[1095,4884,1470],{"class":1116},[1095,4886,2038],{"class":1228},[1095,4888,4846],{"class":1232},[1095,4890,1728],{"class":1228},[1095,4892,1164],{"class":1116},[1095,4894,4896],{"class":1097,"line":4895},143,[1095,4897,1535],{"class":1116},[1095,4899,4901],{"class":1097,"line":4900},144,[1095,4902,2260],{"class":1116},[1035,4904,4906],{"id":4905},"_3-mongodb-serializers","3. MongoDB Serializers",[1085,4908,4910],{"className":1087,"code":4909,"language":1089,"meta":1090,"style":1090},"# serializers.py\nfrom rest_framework import serializers\nfrom rest_framework_mongoengine import serializers as mongo_serializers\nfrom .models import User, Address, SocialLink, UserPreferences\n\nclass AddressSerializer(serializers.Serializer):\n    street = serializers.CharField(max_length=200)\n    city = serializers.CharField(max_length=100)\n    state = serializers.CharField(max_length=50, required=False)\n    postal_code = serializers.CharField(max_length=20, required=False)\n    country = serializers.CharField(max_length=50)\n    is_primary = serializers.BooleanField(default=False)\n\nclass SocialLinkSerializer(serializers.Serializer):\n    platform = serializers.CharField(max_length=50)\n    url = serializers.URLField()\n    verified = serializers.BooleanField(default=False)\n\nclass UserPreferencesSerializer(serializers.Serializer):\n    theme = serializers.ChoiceField(choices=['light', 'dark'], default='light')\n    language = serializers.CharField(max_length=10, default='en')\n    timezone = serializers.CharField(max_length=50, default='UTC')\n    notifications = serializers.DictField(default={\n        'email': True,\n        'push': True,\n        'sms': False\n    })\n\nclass UserSerializer(mongo_serializers.DocumentSerializer):\n    addresses = AddressSerializer(many=True, required=False)\n    social_links = SocialLinkSerializer(many=True, required=False)\n    preferences = UserPreferencesSerializer(required=False)\n    password = serializers.CharField(write_only=True)\n    \n    class Meta:\n        model = User\n        fields = [\n            'user_id', 'username', 'email', 'first_name', 'last_name',\n            'bio', 'avatar_url', 'date_of_birth', 'addresses', 'social_links',\n            'preferences', 'is_active', 'is_verified', 'created_at',\n            'updated_at', 'last_login', 'password'\n        ]\n        read_only_fields = ['user_id', 'created_at', 'updated_at']\n    \n    def create(self, validated_data):\n        password = validated_data.pop('password')\n        user = User(**validated_data)\n        user.password_hash = self.hash_password(password)\n        user.save()\n        return user\n    \n    def update(self, instance, validated_data):\n        password = validated_data.pop('password', None)\n        if password:\n            instance.password_hash = self.hash_password(password)\n        \n        for attr, value in validated_data.items():\n            setattr(instance, attr, value)\n        \n        instance.save()\n        return instance\n    \n    def hash_password(self, password):\n        from django.contrib.auth.hashers import make_password\n        return make_password(password)\n\nclass UserListSerializer(serializers.Serializer):\n    \"\"\"Lightweight serializer for user lists\"\"\"\n    user_id = serializers.CharField()\n    username = serializers.CharField()\n    email = serializers.EmailField()\n    first_name = serializers.CharField()\n    last_name = serializers.CharField()\n    avatar_url = serializers.URLField()\n    is_active = serializers.BooleanField()\n    created_at = serializers.DateTimeField()\n",[1092,4911,4912,4917,4929,4947,4974,4978,4997,5020,5042,5072,5102,5124,5146,5150,5167,5189,5203,5225,5229,5246,5295,5329,5363,5381,5395,5409,5421,5425,5429,5448,5475,5501,5519,5543,5547,5558,5568,5577,5619,5662,5696,5721,5725,5759,5763,5781,5805,5823,5848,5858,5865,5869,5891,5917,5927,5950,5955,5980,6002,6006,6017,6024,6028,6045,6073,6086,6090,6107,6116,6130,6144,6158,6172,6186,6200,6214],{"__ignoreMap":1090},[1095,4913,4914],{"class":1097,"line":1098},[1095,4915,4916],{"class":1101},"# serializers.py\n",[1095,4918,4919,4921,4924,4926],{"class":1097,"line":1105},[1095,4920,1679],{"class":1670},[1095,4922,4923],{"class":1136}," rest_framework ",[1095,4925,1671],{"class":1670},[1095,4927,4928],{"class":1136}," serializers\n",[1095,4930,4931,4933,4936,4938,4941,4944],{"class":1097,"line":1133},[1095,4932,1679],{"class":1670},[1095,4934,4935],{"class":1136}," rest_framework_mongoengine ",[1095,4937,1671],{"class":1670},[1095,4939,4940],{"class":1136}," serializers ",[1095,4942,4943],{"class":1670},"as",[1095,4945,4946],{"class":1136}," mongo_serializers\n",[1095,4948,4949,4951,4954,4957,4959,4961,4963,4965,4967,4969,4971],{"class":1097,"line":1167},[1095,4950,1679],{"class":1670},[1095,4952,4953],{"class":1116}," .",[1095,4955,4956],{"class":1136},"models ",[1095,4958,1671],{"class":1670},[1095,4960,1113],{"class":1136},[1095,4962,1470],{"class":1116},[1095,4964,2331],{"class":1136},[1095,4966,1470],{"class":1116},[1095,4968,2534],{"class":1136},[1095,4970,1470],{"class":1116},[1095,4972,4973],{"class":1136}," UserPreferences\n",[1095,4975,4976],{"class":1097,"line":1185},[1095,4977,1210],{"emptyLinePlaceholder":1209},[1095,4979,4980,4982,4985,4987,4990,4992,4995],{"class":1097,"line":1206},[1095,4981,1109],{"class":1108},[1095,4983,4984],{"class":1112}," AddressSerializer",[1095,4986,1117],{"class":1116},[1095,4988,4989],{"class":1120},"serializers",[1095,4991,1124],{"class":1116},[1095,4993,4994],{"class":1120},"Serializer",[1095,4996,1130],{"class":1116},[1095,4998,4999,5001,5003,5006,5008,5010,5012,5014,5016,5018],{"class":1097,"line":1213},[1095,5000,2356],{"class":1136},[1095,5002,1140],{"class":1116},[1095,5004,5005],{"class":1136}," serializers",[1095,5007,1124],{"class":1116},[1095,5009,1149],{"class":1148},[1095,5011,1117],{"class":1116},[1095,5013,1155],{"class":1154},[1095,5015,1140],{"class":1116},[1095,5017,2375],{"class":1160},[1095,5019,1164],{"class":1116},[1095,5021,5022,5024,5026,5028,5030,5032,5034,5036,5038,5040],{"class":1097,"line":1219},[1095,5023,2392],{"class":1136},[1095,5025,1140],{"class":1116},[1095,5027,5005],{"class":1136},[1095,5029,1124],{"class":1116},[1095,5031,1149],{"class":1148},[1095,5033,1117],{"class":1116},[1095,5035,1155],{"class":1154},[1095,5037,1140],{"class":1116},[1095,5039,2409],{"class":1160},[1095,5041,1164],{"class":1116},[1095,5043,5044,5046,5048,5050,5052,5054,5056,5058,5060,5062,5064,5066,5068,5070],{"class":1097,"line":1225},[1095,5045,2424],{"class":1136},[1095,5047,1140],{"class":1116},[1095,5049,5005],{"class":1136},[1095,5051,1124],{"class":1116},[1095,5053,1149],{"class":1148},[1095,5055,1117],{"class":1116},[1095,5057,1155],{"class":1154},[1095,5059,1140],{"class":1116},[1095,5061,2441],{"class":1160},[1095,5063,1470],{"class":1116},[1095,5065,2380],{"class":1154},[1095,5067,1140],{"class":1116},[1095,5069,2521],{"class":1400},[1095,5071,1164],{"class":1116},[1095,5073,5074,5076,5078,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100],{"class":1097,"line":1257},[1095,5075,2448],{"class":1136},[1095,5077,1140],{"class":1116},[1095,5079,5005],{"class":1136},[1095,5081,1124],{"class":1116},[1095,5083,1149],{"class":1148},[1095,5085,1117],{"class":1116},[1095,5087,1155],{"class":1154},[1095,5089,1140],{"class":1116},[1095,5091,2465],{"class":1160},[1095,5093,1470],{"class":1116},[1095,5095,2380],{"class":1154},[1095,5097,1140],{"class":1116},[1095,5099,2521],{"class":1400},[1095,5101,1164],{"class":1116},[1095,5103,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122],{"class":1097,"line":1280},[1095,5105,2472],{"class":1136},[1095,5107,1140],{"class":1116},[1095,5109,5005],{"class":1136},[1095,5111,1124],{"class":1116},[1095,5113,1149],{"class":1148},[1095,5115,1117],{"class":1116},[1095,5117,1155],{"class":1154},[1095,5119,1140],{"class":1116},[1095,5121,2441],{"class":1160},[1095,5123,1164],{"class":1116},[1095,5125,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144],{"class":1097,"line":1301},[1095,5127,2503],{"class":1136},[1095,5129,1140],{"class":1116},[1095,5131,5005],{"class":1136},[1095,5133,1124],{"class":1116},[1095,5135,2512],{"class":1148},[1095,5137,1117],{"class":1116},[1095,5139,2017],{"class":1154},[1095,5141,1140],{"class":1116},[1095,5143,2521],{"class":1400},[1095,5145,1164],{"class":1116},[1095,5147,5148],{"class":1097,"line":1316},[1095,5149,1210],{"emptyLinePlaceholder":1209},[1095,5151,5152,5154,5157,5159,5161,5163,5165],{"class":1097,"line":1338},[1095,5153,1109],{"class":1108},[1095,5155,5156],{"class":1112}," SocialLinkSerializer",[1095,5158,1117],{"class":1116},[1095,5160,4989],{"class":1120},[1095,5162,1124],{"class":1116},[1095,5164,4994],{"class":1120},[1095,5166,1130],{"class":1116},[1095,5168,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187],{"class":1097,"line":1352},[1095,5170,2554],{"class":1136},[1095,5172,1140],{"class":1116},[1095,5174,5005],{"class":1136},[1095,5176,1124],{"class":1116},[1095,5178,1149],{"class":1148},[1095,5180,1117],{"class":1116},[1095,5182,1155],{"class":1154},[1095,5184,1140],{"class":1116},[1095,5186,2441],{"class":1160},[1095,5188,1164],{"class":1116},[1095,5190,5191,5193,5195,5197,5199,5201],{"class":1097,"line":1374},[1095,5192,2585],{"class":1136},[1095,5194,1140],{"class":1116},[1095,5196,5005],{"class":1136},[1095,5198,1124],{"class":1116},[1095,5200,2594],{"class":1148},[1095,5202,1182],{"class":1116},[1095,5204,5205,5207,5209,5211,5213,5215,5217,5219,5221,5223],{"class":1097,"line":1388},[1095,5206,2610],{"class":1136},[1095,5208,1140],{"class":1116},[1095,5210,5005],{"class":1136},[1095,5212,1124],{"class":1116},[1095,5214,2512],{"class":1148},[1095,5216,1117],{"class":1116},[1095,5218,2017],{"class":1154},[1095,5220,1140],{"class":1116},[1095,5222,2521],{"class":1400},[1095,5224,1164],{"class":1116},[1095,5226,5227],{"class":1097,"line":1406},[1095,5228,1210],{"emptyLinePlaceholder":1209},[1095,5230,5231,5233,5236,5238,5240,5242,5244],{"class":1097,"line":1421},[1095,5232,1109],{"class":1108},[1095,5234,5235],{"class":1112}," UserPreferencesSerializer",[1095,5237,1117],{"class":1116},[1095,5239,4989],{"class":1120},[1095,5241,1124],{"class":1116},[1095,5243,4994],{"class":1120},[1095,5245,1130],{"class":1116},[1095,5247,5248,5250,5252,5254,5256,5259,5261,5264,5266,5268,5270,5272,5274,5276,5278,5280,5283,5285,5287,5289,5291,5293],{"class":1097,"line":1427},[1095,5249,2659],{"class":1136},[1095,5251,1140],{"class":1116},[1095,5253,5005],{"class":1136},[1095,5255,1124],{"class":1116},[1095,5257,5258],{"class":1148},"ChoiceField",[1095,5260,1117],{"class":1116},[1095,5262,5263],{"class":1154},"choices",[1095,5265,2696],{"class":1116},[1095,5267,1728],{"class":1228},[1095,5269,2686],{"class":1232},[1095,5271,1728],{"class":1228},[1095,5273,1470],{"class":1116},[1095,5275,2038],{"class":1228},[1095,5277,1367],{"class":1232},[1095,5279,1728],{"class":1228},[1095,5281,5282],{"class":1116},"],",[1095,5284,1747],{"class":1154},[1095,5286,1140],{"class":1116},[1095,5288,1728],{"class":1228},[1095,5290,2686],{"class":1232},[1095,5292,1728],{"class":1228},[1095,5294,1164],{"class":1116},[1095,5296,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327],{"class":1097,"line":1433},[1095,5298,2718],{"class":1136},[1095,5300,1140],{"class":1116},[1095,5302,5005],{"class":1136},[1095,5304,1124],{"class":1116},[1095,5306,1149],{"class":1148},[1095,5308,1117],{"class":1116},[1095,5310,1155],{"class":1154},[1095,5312,1140],{"class":1116},[1095,5314,2735],{"class":1160},[1095,5316,1470],{"class":1116},[1095,5318,1747],{"class":1154},[1095,5320,1140],{"class":1116},[1095,5322,1728],{"class":1228},[1095,5324,2746],{"class":1232},[1095,5326,1728],{"class":1228},[1095,5328,1164],{"class":1116},[1095,5330,5331,5333,5335,5337,5339,5341,5343,5345,5347,5349,5351,5353,5355,5357,5359,5361],{"class":1097,"line":1448},[1095,5332,2755],{"class":1136},[1095,5334,1140],{"class":1116},[1095,5336,5005],{"class":1136},[1095,5338,1124],{"class":1116},[1095,5340,1149],{"class":1148},[1095,5342,1117],{"class":1116},[1095,5344,1155],{"class":1154},[1095,5346,1140],{"class":1116},[1095,5348,2441],{"class":1160},[1095,5350,1470],{"class":1116},[1095,5352,1747],{"class":1154},[1095,5354,1140],{"class":1116},[1095,5356,1728],{"class":1228},[1095,5358,2782],{"class":1232},[1095,5360,1728],{"class":1228},[1095,5362,1164],{"class":1116},[1095,5364,5365,5367,5369,5371,5373,5375,5377,5379],{"class":1097,"line":1492},[1095,5366,2791],{"class":1136},[1095,5368,1140],{"class":1116},[1095,5370,5005],{"class":1136},[1095,5372,1124],{"class":1116},[1095,5374,2800],{"class":1148},[1095,5376,1117],{"class":1116},[1095,5378,2017],{"class":1154},[1095,5380,2807],{"class":1116},[1095,5382,5383,5385,5387,5389,5391,5393],{"class":1097,"line":1532},[1095,5384,2028],{"class":1228},[1095,5386,1285],{"class":1232},[1095,5388,1728],{"class":1228},[1095,5390,1239],{"class":1116},[1095,5392,1401],{"class":1400},[1095,5394,1277],{"class":1116},[1095,5396,5397,5399,5401,5403,5405,5407],{"class":1097,"line":1538},[1095,5398,2028],{"class":1228},[1095,5400,1411],{"class":1232},[1095,5402,1728],{"class":1228},[1095,5404,1239],{"class":1116},[1095,5406,1401],{"class":1400},[1095,5408,1277],{"class":1116},[1095,5410,5411,5413,5415,5417,5419],{"class":1097,"line":1544},[1095,5412,2028],{"class":1228},[1095,5414,2842],{"class":1232},[1095,5416,1728],{"class":1228},[1095,5418,1239],{"class":1116},[1095,5420,1418],{"class":1400},[1095,5422,5423],{"class":1097,"line":1570},[1095,5424,2853],{"class":1116},[1095,5426,5427],{"class":1097,"line":1595},[1095,5428,1210],{"emptyLinePlaceholder":1209},[1095,5430,5431,5433,5436,5438,5441,5443,5446],{"class":1097,"line":2163},[1095,5432,1109],{"class":1108},[1095,5434,5435],{"class":1112}," UserSerializer",[1095,5437,1117],{"class":1116},[1095,5439,5440],{"class":1120},"mongo_serializers",[1095,5442,1124],{"class":1116},[1095,5444,5445],{"class":1120},"DocumentSerializer",[1095,5447,1130],{"class":1116},[1095,5449,5450,5452,5454,5456,5458,5461,5463,5465,5467,5469,5471,5473],{"class":1097,"line":2194},[1095,5451,3164],{"class":1136},[1095,5453,1140],{"class":1116},[1095,5455,4984],{"class":1148},[1095,5457,1117],{"class":1116},[1095,5459,5460],{"class":1154},"many",[1095,5462,1140],{"class":1116},[1095,5464,2385],{"class":1400},[1095,5466,1470],{"class":1116},[1095,5468,2380],{"class":1154},[1095,5470,1140],{"class":1116},[1095,5472,2521],{"class":1400},[1095,5474,1164],{"class":1116},[1095,5476,5477,5479,5481,5483,5485,5487,5489,5491,5493,5495,5497,5499],{"class":1097,"line":2230},[1095,5478,3197],{"class":1136},[1095,5480,1140],{"class":1116},[1095,5482,5156],{"class":1148},[1095,5484,1117],{"class":1116},[1095,5486,5460],{"class":1154},[1095,5488,1140],{"class":1116},[1095,5490,2385],{"class":1400},[1095,5492,1470],{"class":1116},[1095,5494,2380],{"class":1154},[1095,5496,1140],{"class":1116},[1095,5498,2521],{"class":1400},[1095,5500,1164],{"class":1116},[1095,5502,5503,5505,5507,5509,5511,5513,5515,5517],{"class":1097,"line":2251},[1095,5504,3226],{"class":1136},[1095,5506,1140],{"class":1116},[1095,5508,5235],{"class":1148},[1095,5510,1117],{"class":1116},[1095,5512,2599],{"class":1154},[1095,5514,1140],{"class":1116},[1095,5516,2521],{"class":1400},[1095,5518,1164],{"class":1116},[1095,5520,5521,5524,5526,5528,5530,5532,5534,5537,5539,5541],{"class":1097,"line":2257},[1095,5522,5523],{"class":1136},"    password ",[1095,5525,1140],{"class":1116},[1095,5527,5005],{"class":1136},[1095,5529,1124],{"class":1116},[1095,5531,1149],{"class":1148},[1095,5533,1117],{"class":1116},[1095,5535,5536],{"class":1154},"write_only",[1095,5538,1140],{"class":1116},[1095,5540,2385],{"class":1400},[1095,5542,1164],{"class":1116},[1095,5544,5545],{"class":1097,"line":2263},[1095,5546,3035],{"class":1136},[1095,5548,5549,5552,5555],{"class":1097,"line":2887},[1095,5550,5551],{"class":1108},"    class",[1095,5553,5554],{"class":1112}," Meta",[1095,5556,5557],{"class":1116},":\n",[1095,5559,5560,5563,5565],{"class":1097,"line":2937},[1095,5561,5562],{"class":1136},"        model ",[1095,5564,1140],{"class":1116},[1095,5566,5567],{"class":1136}," User\n",[1095,5569,5570,5573,5575],{"class":1097,"line":2977},[1095,5571,5572],{"class":1136},"        fields ",[1095,5574,1140],{"class":1116},[1095,5576,1445],{"class":1116},[1095,5578,5579,5581,5583,5585,5587,5589,5591,5593,5595,5597,5599,5601,5603,5605,5607,5609,5611,5613,5615,5617],{"class":1097,"line":3008},[1095,5580,2098],{"class":1228},[1095,5582,3808],{"class":1232},[1095,5584,1728],{"class":1228},[1095,5586,1470],{"class":1116},[1095,5588,2038],{"class":1228},[1095,5590,1262],{"class":1232},[1095,5592,1728],{"class":1228},[1095,5594,1470],{"class":1116},[1095,5596,2038],{"class":1228},[1095,5598,1285],{"class":1232},[1095,5600,1728],{"class":1228},[1095,5602,1470],{"class":1116},[1095,5604,2038],{"class":1228},[1095,5606,3867],{"class":1232},[1095,5608,1728],{"class":1228},[1095,5610,1470],{"class":1116},[1095,5612,2038],{"class":1228},[1095,5614,3887],{"class":1232},[1095,5616,1728],{"class":1228},[1095,5618,1277],{"class":1116},[1095,5620,5621,5623,5625,5627,5629,5631,5633,5635,5637,5639,5642,5644,5646,5648,5650,5652,5654,5656,5658,5660],{"class":1097,"line":3032},[1095,5622,2098],{"class":1228},[1095,5624,1322],{"class":1232},[1095,5626,1728],{"class":1228},[1095,5628,1470],{"class":1116},[1095,5630,2038],{"class":1228},[1095,5632,3926],{"class":1232},[1095,5634,1728],{"class":1228},[1095,5636,1470],{"class":1116},[1095,5638,2038],{"class":1228},[1095,5640,5641],{"class":1232},"date_of_birth",[1095,5643,1728],{"class":1228},[1095,5645,1470],{"class":1116},[1095,5647,2038],{"class":1228},[1095,5649,3946],{"class":1232},[1095,5651,1728],{"class":1228},[1095,5653,1470],{"class":1116},[1095,5655,2038],{"class":1228},[1095,5657,1438],{"class":1232},[1095,5659,1728],{"class":1228},[1095,5661,1277],{"class":1116},[1095,5663,5664,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688,5690,5692,5694],{"class":1097,"line":3038},[1095,5665,2098],{"class":1228},[1095,5667,1343],{"class":1232},[1095,5669,1728],{"class":1228},[1095,5671,1470],{"class":1116},[1095,5673,2038],{"class":1228},[1095,5675,3518],{"class":1232},[1095,5677,1728],{"class":1228},[1095,5679,1470],{"class":1116},[1095,5681,2038],{"class":1228},[1095,5683,4094],{"class":1232},[1095,5685,1728],{"class":1228},[1095,5687,1470],{"class":1116},[1095,5689,2038],{"class":1228},[1095,5691,1549],{"class":1232},[1095,5693,1728],{"class":1228},[1095,5695,1277],{"class":1116},[1095,5697,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718],{"class":1097,"line":3044},[1095,5699,2098],{"class":1228},[1095,5701,3723],{"class":1232},[1095,5703,1728],{"class":1228},[1095,5705,1470],{"class":1116},[1095,5707,2038],{"class":1228},[1095,5709,1575],{"class":1232},[1095,5711,1728],{"class":1228},[1095,5713,1470],{"class":1116},[1095,5715,2038],{"class":1228},[1095,5717,1878],{"class":1232},[1095,5719,5720],{"class":1228},"'\n",[1095,5722,5723],{"class":1097,"line":3068},[1095,5724,1535],{"class":1116},[1095,5726,5727,5730,5732,5734,5736,5738,5740,5742,5744,5746,5748,5750,5752,5754,5756],{"class":1097,"line":3092},[1095,5728,5729],{"class":1136},"        read_only_fields ",[1095,5731,1140],{"class":1116},[1095,5733,3543],{"class":1116},[1095,5735,1728],{"class":1228},[1095,5737,3808],{"class":1232},[1095,5739,1728],{"class":1228},[1095,5741,1470],{"class":1116},[1095,5743,2038],{"class":1228},[1095,5745,1549],{"class":1232},[1095,5747,1728],{"class":1228},[1095,5749,1470],{"class":1116},[1095,5751,2038],{"class":1228},[1095,5753,3723],{"class":1232},[1095,5755,1728],{"class":1228},[1095,5757,5758],{"class":1116},"]\n",[1095,5760,5761],{"class":1097,"line":3117},[1095,5762,3035],{"class":1136},[1095,5764,5765,5767,5770,5772,5774,5776,5779],{"class":1097,"line":3133},[1095,5766,3672],{"class":1108},[1095,5768,5769],{"class":3675}," create",[1095,5771,1117],{"class":1116},[1095,5773,3682],{"class":3681},[1095,5775,1470],{"class":1116},[1095,5777,5778],{"class":3690}," validated_data",[1095,5780,1130],{"class":1116},[1095,5782,5783,5786,5788,5790,5792,5795,5797,5799,5801,5803],{"class":1097,"line":3150},[1095,5784,5785],{"class":1136},"        password ",[1095,5787,1140],{"class":1116},[1095,5789,5778],{"class":1136},[1095,5791,1124],{"class":1116},[1095,5793,5794],{"class":1148},"pop",[1095,5796,1117],{"class":1116},[1095,5798,1728],{"class":1228},[1095,5800,1878],{"class":1232},[1095,5802,1728],{"class":1228},[1095,5804,1164],{"class":1116},[1095,5806,5807,5810,5812,5814,5816,5818,5821],{"class":1097,"line":3155},[1095,5808,5809],{"class":1136},"        user ",[1095,5811,1140],{"class":1116},[1095,5813,1113],{"class":1148},[1095,5815,1117],{"class":1116},[1095,5817,1987],{"class":1986},[1095,5819,5820],{"class":1148},"validated_data",[1095,5822,1164],{"class":1116},[1095,5824,5825,5828,5830,5833,5835,5837,5839,5842,5844,5846],{"class":1097,"line":3161},[1095,5826,5827],{"class":1136},"        user",[1095,5829,1124],{"class":1116},[1095,5831,5832],{"class":3363},"password_hash",[1095,5834,1715],{"class":1116},[1095,5836,3815],{"class":1711},[1095,5838,1124],{"class":1116},[1095,5840,5841],{"class":1148},"hash_password",[1095,5843,1117],{"class":1116},[1095,5845,1878],{"class":1148},[1095,5847,1164],{"class":1116},[1095,5849,5850,5852,5854,5856],{"class":1097,"line":3194},[1095,5851,5827],{"class":1136},[1095,5853,1124],{"class":1116},[1095,5855,3749],{"class":1148},[1095,5857,1182],{"class":1116},[1095,5859,5860,5862],{"class":1097,"line":3223},[1095,5861,3740],{"class":1670},[1095,5863,5864],{"class":1136}," user\n",[1095,5866,5867],{"class":1097,"line":3252},[1095,5868,3035],{"class":1136},[1095,5870,5871,5873,5876,5878,5880,5882,5885,5887,5889],{"class":1097,"line":3257},[1095,5872,3672],{"class":1108},[1095,5874,5875],{"class":3675}," update",[1095,5877,1117],{"class":1116},[1095,5879,3682],{"class":3681},[1095,5881,1470],{"class":1116},[1095,5883,5884],{"class":3690}," instance",[1095,5886,1470],{"class":1116},[1095,5888,5778],{"class":3690},[1095,5890,1130],{"class":1116},[1095,5892,5893,5895,5897,5899,5901,5903,5905,5907,5909,5911,5913,5915],{"class":1097,"line":3263},[1095,5894,5785],{"class":1136},[1095,5896,1140],{"class":1116},[1095,5898,5778],{"class":1136},[1095,5900,1124],{"class":1116},[1095,5902,5794],{"class":1148},[1095,5904,1117],{"class":1116},[1095,5906,1728],{"class":1228},[1095,5908,1878],{"class":1232},[1095,5910,1728],{"class":1228},[1095,5912,1470],{"class":1116},[1095,5914,4143],{"class":1400},[1095,5916,1164],{"class":1116},[1095,5918,5919,5922,5925],{"class":1097,"line":3287},[1095,5920,5921],{"class":1670},"        if",[1095,5923,5924],{"class":1136}," password",[1095,5926,5557],{"class":1116},[1095,5928,5929,5932,5934,5936,5938,5940,5942,5944,5946,5948],{"class":1097,"line":3311},[1095,5930,5931],{"class":1136},"            instance",[1095,5933,1124],{"class":1116},[1095,5935,5832],{"class":3363},[1095,5937,1715],{"class":1116},[1095,5939,3815],{"class":1711},[1095,5941,1124],{"class":1116},[1095,5943,5841],{"class":1148},[1095,5945,1117],{"class":1116},[1095,5947,1878],{"class":1148},[1095,5949,1164],{"class":1116},[1095,5951,5952],{"class":1097,"line":3327},[1095,5953,5954],{"class":1136},"        \n",[1095,5956,5957,5960,5963,5965,5968,5970,5972,5974,5977],{"class":1097,"line":3332},[1095,5958,5959],{"class":1670},"        for",[1095,5961,5962],{"class":1136}," attr",[1095,5964,1470],{"class":1116},[1095,5966,5967],{"class":1136}," value ",[1095,5969,3976],{"class":1670},[1095,5971,5778],{"class":1136},[1095,5973,1124],{"class":1116},[1095,5975,5976],{"class":1148},"items",[1095,5978,5979],{"class":1116},"():\n",[1095,5981,5982,5986,5988,5991,5993,5995,5997,6000],{"class":1097,"line":3338},[1095,5983,5985],{"class":5984},"sJdAF","            setattr",[1095,5987,1117],{"class":1116},[1095,5989,5990],{"class":1148},"instance",[1095,5992,1470],{"class":1116},[1095,5994,5962],{"class":1148},[1095,5996,1470],{"class":1116},[1095,5998,5999],{"class":1148}," value",[1095,6001,1164],{"class":1116},[1095,6003,6004],{"class":1097,"line":3369},[1095,6005,5954],{"class":1136},[1095,6007,6008,6011,6013,6015],{"class":1097,"line":3397},[1095,6009,6010],{"class":1136},"        instance",[1095,6012,1124],{"class":1116},[1095,6014,3749],{"class":1148},[1095,6016,1182],{"class":1116},[1095,6018,6019,6021],{"class":1097,"line":3413},[1095,6020,3740],{"class":1670},[1095,6022,6023],{"class":1136}," instance\n",[1095,6025,6026],{"class":1097,"line":3418},[1095,6027,3035],{"class":1136},[1095,6029,6030,6032,6035,6037,6039,6041,6043],{"class":1097,"line":3424},[1095,6031,3672],{"class":1108},[1095,6033,6034],{"class":3675}," hash_password",[1095,6036,1117],{"class":1116},[1095,6038,3682],{"class":3681},[1095,6040,1470],{"class":1116},[1095,6042,5924],{"class":3690},[1095,6044,1130],{"class":1116},[1095,6046,6047,6050,6053,6055,6058,6060,6063,6065,6068,6070],{"class":1097,"line":3434},[1095,6048,6049],{"class":1670},"        from",[1095,6051,6052],{"class":1136}," django",[1095,6054,1124],{"class":1116},[1095,6056,6057],{"class":1136},"contrib",[1095,6059,1124],{"class":1116},[1095,6061,6062],{"class":1136},"auth",[1095,6064,1124],{"class":1116},[1095,6066,6067],{"class":1136},"hashers ",[1095,6069,1671],{"class":1670},[1095,6071,6072],{"class":1136}," make_password\n",[1095,6074,6075,6077,6080,6082,6084],{"class":1097,"line":3455},[1095,6076,3740],{"class":1670},[1095,6078,6079],{"class":1148}," make_password",[1095,6081,1117],{"class":1116},[1095,6083,1878],{"class":1148},[1095,6085,1164],{"class":1116},[1095,6087,6088],{"class":1097,"line":3469},[1095,6089,1210],{"emptyLinePlaceholder":1209},[1095,6091,6092,6094,6097,6099,6101,6103,6105],{"class":1097,"line":3480},[1095,6093,1109],{"class":1108},[1095,6095,6096],{"class":1112}," UserListSerializer",[1095,6098,1117],{"class":1116},[1095,6100,4989],{"class":1120},[1095,6102,1124],{"class":1116},[1095,6104,4994],{"class":1120},[1095,6106,1130],{"class":1116},[1095,6108,6109,6111,6114],{"class":1097,"line":3491},[1095,6110,2344],{"class":2343},[1095,6112,6113],{"class":2347},"Lightweight serializer for user lists",[1095,6115,2351],{"class":2343},[1095,6117,6118,6120,6122,6124,6126,6128],{"class":1097,"line":3502},[1095,6119,2890],{"class":1136},[1095,6121,1140],{"class":1116},[1095,6123,5005],{"class":1136},[1095,6125,1124],{"class":1116},[1095,6127,1149],{"class":1148},[1095,6129,1182],{"class":1116},[1095,6131,6132,6134,6136,6138,6140,6142],{"class":1097,"line":3525},[1095,6133,1137],{"class":1136},[1095,6135,1140],{"class":1116},[1095,6137,5005],{"class":1136},[1095,6139,1124],{"class":1116},[1095,6141,1149],{"class":1148},[1095,6143,1182],{"class":1116},[1095,6145,6146,6148,6150,6152,6154,6156],{"class":1097,"line":3531},[1095,6147,1170],{"class":1136},[1095,6149,1140],{"class":1116},[1095,6151,5005],{"class":1136},[1095,6153,1124],{"class":1116},[1095,6155,1179],{"class":1148},[1095,6157,1182],{"class":1116},[1095,6159,6160,6162,6164,6166,6168,6170],{"class":1097,"line":3574},[1095,6161,3047],{"class":1136},[1095,6163,1140],{"class":1116},[1095,6165,5005],{"class":1136},[1095,6167,1124],{"class":1116},[1095,6169,1149],{"class":1148},[1095,6171,1182],{"class":1116},[1095,6173,6174,6176,6178,6180,6182,6184],{"class":1097,"line":3595},[1095,6175,3071],{"class":1136},[1095,6177,1140],{"class":1116},[1095,6179,5005],{"class":1136},[1095,6181,1124],{"class":1116},[1095,6183,1149],{"class":1148},[1095,6185,1182],{"class":1116},[1095,6187,6188,6190,6192,6194,6196,6198],{"class":1097,"line":3649},[1095,6189,3120],{"class":1136},[1095,6191,1140],{"class":1116},[1095,6193,5005],{"class":1136},[1095,6195,1124],{"class":1116},[1095,6197,2594],{"class":1148},[1095,6199,1182],{"class":1116},[1095,6201,6202,6204,6206,6208,6210,6212],{"class":1097,"line":3654},[1095,6203,3266],{"class":1136},[1095,6205,1140],{"class":1116},[1095,6207,5005],{"class":1136},[1095,6209,1124],{"class":1116},[1095,6211,2512],{"class":1148},[1095,6213,1182],{"class":1116},[1095,6215,6216,6218,6220,6222,6224,6226],{"class":1097,"line":3659},[1095,6217,3341],{"class":1136},[1095,6219,1140],{"class":1116},[1095,6221,5005],{"class":1136},[1095,6223,1124],{"class":1116},[1095,6225,3145],{"class":1148},[1095,6227,1182],{"class":1116},[1035,6229,6231],{"id":6230},"_4-mongodb-views-and-queries","4. MongoDB Views and Queries",[1085,6233,6235],{"className":1087,"code":6234,"language":1089,"meta":1090,"style":1090},"# views.py\nfrom rest_framework import status\nfrom rest_framework.decorators import api_view, action\nfrom rest_framework.response import Response\nfrom rest_framework_mongoengine import viewsets\nfrom mongoengine.queryset.visitor import Q\nfrom mongoengine import DoesNotExist\nfrom datetime import datetime, timedelta\nfrom .models import User, UserActivity\nfrom .serializers import UserSerializer, UserListSerializer\n\nclass UserViewSet(viewsets.ModelViewSet):\n    queryset = User.objects.all()\n    serializer_class = UserSerializer\n    \n    def get_serializer_class(self):\n        if self.action == 'list':\n            return UserListSerializer\n        return UserSerializer\n    \n    def get_queryset(self):\n        queryset = User.objects.all()\n        \n        # Filtering\n        is_active = self.request.query_params.get('is_active')\n        if is_active is not None:\n            queryset = queryset.filter(is_active=is_active.lower() == 'true')\n        \n        # Search\n        search = self.request.query_params.get('search')\n        if search:\n            queryset = queryset.filter(\n                Q(username__icontains=search) |\n                Q(email__icontains=search) |\n                Q(first_name__icontains=search) |\n                Q(last_name__icontains=search)\n            )\n        \n        # Date range filtering\n        created_after = self.request.query_params.get('created_after')\n        if created_after:\n            try:\n                date = datetime.fromisoformat(created_after)\n                queryset = queryset.filter(created_at__gte=date)\n            except ValueError:\n                pass\n        \n        return queryset.order_by('-created_at')\n    \n    @action(detail=True, methods=['post'])\n    def add_address(self, request, pk=None):\n        \"\"\"Add address to user\"\"\"\n        try:\n            user = User.objects.get(user_id=pk)\n            address_data = request.data\n            \n            # Validate address data\n            from .models import Address\n            address = Address(**address_data)\n            address.validate()\n            \n            # If this is primary address, unset others\n            if address_data.get('is_primary', False):\n                for addr in user.addresses:\n                    addr.is_primary = False\n            \n            user.addresses.append(address)\n            user.save()\n            \n            return Response({'message': 'Address added successfully'})\n        \n        except DoesNotExist:\n            return Response({'error': 'User not found'}, status=status.HTTP_404_NOT_FOUND)\n        except Exception as e:\n            return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)\n    \n    @action(detail=True, methods=['get'])\n    def activity_summary(self, request, pk=None):\n        \"\"\"Get user activity summary\"\"\"\n        try:\n            user = User.objects.get(user_id=pk)\n            \n            # Aggregation pipeline for activity summary\n            pipeline = [\n                {'$match': {'user': user.pk}},\n                {'$group': {\n                    '_id': '$action',\n                    'count': {'$sum': 1},\n                    'last_activity': {'$max': '$timestamp'}\n                }},\n                {'$sort': {'count': -1}}\n            ]\n            \n            activities = list(UserActivity.objects.aggregate(pipeline))\n            \n            return Response({\n                'user_id': user.user_id,\n                'activity_summary': activities,\n                'total_activities': UserActivity.objects.filter(user=user).count()\n            })\n        \n        except DoesNotExist:\n            return Response({'error': 'User not found'}, status=status.HTTP_404_NOT_FOUND)\n    \n    @action(detail=False, methods=['get'])\n    def analytics(self, request):\n        \"\"\"User analytics using MongoDB aggregation\"\"\"\n        pipeline = [\n            # Match active users\n            {'$match': {'is_active': True}},\n            \n            # Group by creation month\n            {'$group': {\n                '_id': {\n                    'year': {'$year': '$created_at'},\n                    'month': {'$month': '$created_at'}\n                },\n                'user_count': {'$sum': 1},\n                'verified_count': {\n                    '$sum': {'$cond': [{'$eq': ['$is_verified', True]}, 1, 0]}\n                }\n            }},\n            \n            # Sort by date\n            {'$sort': {'_id.year': -1, '_id.month': -1}},\n            \n            # Limit to last 12 months\n            {'$limit': 12}\n        ]\n        \n        analytics_data = list(User.objects.aggregate(pipeline))\n        \n        return Response({\n            'monthly_registrations': analytics_data,\n            'total_users': User.objects.count(),\n            'active_users': User.objects.filter(is_active=True).count(),\n            'verified_users': User.objects.filter(is_verified=True).count()\n        })\n\n@api_view(['GET'])\ndef user_search(request):\n    \"\"\"Advanced user search with text indexing\"\"\"\n    query = request.GET.get('q', '')\n    if not query:\n        return Response({'error': 'Query parameter q is required'}, \n                       status=status.HTTP_400_BAD_REQUEST)\n    \n    # Use MongoDB text search\n    users = User.objects.search_text(query).order_by('$text_score')\n    \n    # Limit results\n    limit = min(int(request.GET.get('limit', 20)), 100)\n    users = users[:limit]\n    \n    serializer = UserListSerializer(users, many=True)\n    return Response({\n        'query': query,\n        'results': serializer.data,\n        'count': len(serializer.data)\n    })\n",[1092,6236,6237,6242,6253,6275,6291,6302,6323,6334,6349,6366,6384,6388,6407,6428,6438,6442,6455,6477,6484,6490,6494,6507,6526,6530,6535,6569,6586,6627,6631,6636,6668,6677,6692,6712,6729,6746,6761,6766,6770,6775,6807,6816,6823,6843,6868,6878,6883,6887,6909,6913,6945,6973,6982,6989,7017,7031,7036,7041,7055,7073,7085,7089,7094,7121,7139,7152,7156,7177,7187,7191,7220,7224,7234,7277,7292,7331,7335,7363,7388,7397,7403,7429,7433,7438,7447,7480,7495,7515,7542,7573,7578,7610,7615,7619,7650,7654,7663,7681,7697,7733,7738,7742,7750,7786,7790,7818,7835,7844,7853,7858,7884,7888,7893,7907,7919,7950,7980,7985,8010,8023,8082,8087,8092,8096,8101,8145,8149,8154,8172,8176,8180,8207,8211,8219,8235,8259,8294,8329,8334,8338,8358,8372,8381,8414,8426,8455,8471,8476,8482,8521,8526,8532,8581,8598,8603,8628,8638,8653,8675,8700],{"__ignoreMap":1090},[1095,6238,6239],{"class":1097,"line":1098},[1095,6240,6241],{"class":1101},"# views.py\n",[1095,6243,6244,6246,6248,6250],{"class":1097,"line":1105},[1095,6245,1679],{"class":1670},[1095,6247,4923],{"class":1136},[1095,6249,1671],{"class":1670},[1095,6251,6252],{"class":1136}," status\n",[1095,6254,6255,6257,6260,6262,6265,6267,6270,6272],{"class":1097,"line":1133},[1095,6256,1679],{"class":1670},[1095,6258,6259],{"class":1136}," rest_framework",[1095,6261,1124],{"class":1116},[1095,6263,6264],{"class":1136},"decorators ",[1095,6266,1671],{"class":1670},[1095,6268,6269],{"class":1136}," api_view",[1095,6271,1470],{"class":1116},[1095,6273,6274],{"class":1136}," action\n",[1095,6276,6277,6279,6281,6283,6286,6288],{"class":1097,"line":1167},[1095,6278,1679],{"class":1670},[1095,6280,6259],{"class":1136},[1095,6282,1124],{"class":1116},[1095,6284,6285],{"class":1136},"response ",[1095,6287,1671],{"class":1670},[1095,6289,6290],{"class":1136}," Response\n",[1095,6292,6293,6295,6297,6299],{"class":1097,"line":1185},[1095,6294,1679],{"class":1670},[1095,6296,4935],{"class":1136},[1095,6298,1671],{"class":1670},[1095,6300,6301],{"class":1136}," viewsets\n",[1095,6303,6304,6306,6308,6310,6313,6315,6318,6320],{"class":1097,"line":1206},[1095,6305,1679],{"class":1670},[1095,6307,1634],{"class":1136},[1095,6309,1124],{"class":1116},[1095,6311,6312],{"class":1136},"queryset",[1095,6314,1124],{"class":1116},[1095,6316,6317],{"class":1136},"visitor ",[1095,6319,1671],{"class":1670},[1095,6321,6322],{"class":1136}," Q\n",[1095,6324,6325,6327,6329,6331],{"class":1097,"line":1213},[1095,6326,1679],{"class":1670},[1095,6328,2286],{"class":1136},[1095,6330,1671],{"class":1670},[1095,6332,6333],{"class":1136}," DoesNotExist\n",[1095,6335,6336,6338,6340,6342,6344,6346],{"class":1097,"line":1219},[1095,6337,1679],{"class":1670},[1095,6339,2308],{"class":1136},[1095,6341,1671],{"class":1670},[1095,6343,3728],{"class":1136},[1095,6345,1470],{"class":1116},[1095,6347,6348],{"class":1136}," timedelta\n",[1095,6350,6351,6353,6355,6357,6359,6361,6363],{"class":1097,"line":1225},[1095,6352,1679],{"class":1670},[1095,6354,4953],{"class":1116},[1095,6356,4956],{"class":1136},[1095,6358,1671],{"class":1670},[1095,6360,1113],{"class":1136},[1095,6362,1470],{"class":1116},[1095,6364,6365],{"class":1136}," UserActivity\n",[1095,6367,6368,6370,6372,6375,6377,6379,6381],{"class":1097,"line":1257},[1095,6369,1679],{"class":1670},[1095,6371,4953],{"class":1116},[1095,6373,6374],{"class":1136},"serializers ",[1095,6376,1671],{"class":1670},[1095,6378,5435],{"class":1136},[1095,6380,1470],{"class":1116},[1095,6382,6383],{"class":1136}," UserListSerializer\n",[1095,6385,6386],{"class":1097,"line":1280},[1095,6387,1210],{"emptyLinePlaceholder":1209},[1095,6389,6390,6392,6395,6397,6400,6402,6405],{"class":1097,"line":1301},[1095,6391,1109],{"class":1108},[1095,6393,6394],{"class":1112}," UserViewSet",[1095,6396,1117],{"class":1116},[1095,6398,6399],{"class":1120},"viewsets",[1095,6401,1124],{"class":1116},[1095,6403,6404],{"class":1120},"ModelViewSet",[1095,6406,1130],{"class":1116},[1095,6408,6409,6412,6414,6416,6418,6421,6423,6426],{"class":1097,"line":1316},[1095,6410,6411],{"class":1136},"    queryset ",[1095,6413,1140],{"class":1116},[1095,6415,1113],{"class":1136},[1095,6417,1124],{"class":1116},[1095,6419,6420],{"class":3363},"objects",[1095,6422,1124],{"class":1116},[1095,6424,6425],{"class":1148},"all",[1095,6427,1182],{"class":1116},[1095,6429,6430,6433,6435],{"class":1097,"line":1338},[1095,6431,6432],{"class":1136},"    serializer_class ",[1095,6434,1140],{"class":1116},[1095,6436,6437],{"class":1136}," UserSerializer\n",[1095,6439,6440],{"class":1097,"line":1352},[1095,6441,3035],{"class":1136},[1095,6443,6444,6446,6449,6451,6453],{"class":1097,"line":1374},[1095,6445,3672],{"class":1108},[1095,6447,6448],{"class":3675}," get_serializer_class",[1095,6450,1117],{"class":1116},[1095,6452,3682],{"class":3681},[1095,6454,1130],{"class":1116},[1095,6456,6457,6459,6461,6463,6465,6468,6470,6473,6475],{"class":1097,"line":1388},[1095,6458,5921],{"class":1670},[1095,6460,3815],{"class":1711},[1095,6462,1124],{"class":1116},[1095,6464,4846],{"class":3363},[1095,6466,6467],{"class":1986}," ==",[1095,6469,2038],{"class":1228},[1095,6471,6472],{"class":1232},"list",[1095,6474,1728],{"class":1228},[1095,6476,5557],{"class":1116},[1095,6478,6479,6482],{"class":1097,"line":1406},[1095,6480,6481],{"class":1670},"            return",[1095,6483,6383],{"class":1136},[1095,6485,6486,6488],{"class":1097,"line":1421},[1095,6487,3740],{"class":1670},[1095,6489,6437],{"class":1136},[1095,6491,6492],{"class":1097,"line":1427},[1095,6493,3035],{"class":1136},[1095,6495,6496,6498,6501,6503,6505],{"class":1097,"line":1433},[1095,6497,3672],{"class":1108},[1095,6499,6500],{"class":3675}," get_queryset",[1095,6502,1117],{"class":1116},[1095,6504,3682],{"class":3681},[1095,6506,1130],{"class":1116},[1095,6508,6509,6512,6514,6516,6518,6520,6522,6524],{"class":1097,"line":1448},[1095,6510,6511],{"class":1136},"        queryset ",[1095,6513,1140],{"class":1116},[1095,6515,1113],{"class":1136},[1095,6517,1124],{"class":1116},[1095,6519,6420],{"class":3363},[1095,6521,1124],{"class":1116},[1095,6523,6425],{"class":1148},[1095,6525,1182],{"class":1116},[1095,6527,6528],{"class":1097,"line":1492},[1095,6529,5954],{"class":1136},[1095,6531,6532],{"class":1097,"line":1532},[1095,6533,6534],{"class":1101},"        # Filtering\n",[1095,6536,6537,6540,6542,6544,6546,6549,6551,6554,6556,6559,6561,6563,6565,6567],{"class":1097,"line":1538},[1095,6538,6539],{"class":1136},"        is_active ",[1095,6541,1140],{"class":1116},[1095,6543,3815],{"class":1711},[1095,6545,1124],{"class":1116},[1095,6547,6548],{"class":3363},"request",[1095,6550,1124],{"class":1116},[1095,6552,6553],{"class":3363},"query_params",[1095,6555,1124],{"class":1116},[1095,6557,6558],{"class":1148},"get",[1095,6560,1117],{"class":1116},[1095,6562,1728],{"class":1228},[1095,6564,3518],{"class":1232},[1095,6566,1728],{"class":1228},[1095,6568,1164],{"class":1116},[1095,6570,6571,6573,6576,6579,6582,6584],{"class":1097,"line":1544},[1095,6572,5921],{"class":1670},[1095,6574,6575],{"class":1136}," is_active ",[1095,6577,6578],{"class":1986},"is",[1095,6580,6581],{"class":1986}," not",[1095,6583,4143],{"class":1400},[1095,6585,5557],{"class":1116},[1095,6587,6588,6591,6593,6596,6598,6601,6603,6605,6607,6609,6611,6614,6616,6618,6620,6623,6625],{"class":1097,"line":1570},[1095,6589,6590],{"class":1136},"            queryset ",[1095,6592,1140],{"class":1116},[1095,6594,6595],{"class":1136}," queryset",[1095,6597,1124],{"class":1116},[1095,6599,6600],{"class":1148},"filter",[1095,6602,1117],{"class":1116},[1095,6604,3518],{"class":1154},[1095,6606,1140],{"class":1116},[1095,6608,3518],{"class":1148},[1095,6610,1124],{"class":1116},[1095,6612,6613],{"class":1148},"lower",[1095,6615,1200],{"class":1116},[1095,6617,6467],{"class":1986},[1095,6619,2038],{"class":1228},[1095,6621,6622],{"class":1232},"true",[1095,6624,1728],{"class":1228},[1095,6626,1164],{"class":1116},[1095,6628,6629],{"class":1097,"line":1595},[1095,6630,5954],{"class":1136},[1095,6632,6633],{"class":1097,"line":2163},[1095,6634,6635],{"class":1101},"        # Search\n",[1095,6637,6638,6641,6643,6645,6647,6649,6651,6653,6655,6657,6659,6661,6664,6666],{"class":1097,"line":2194},[1095,6639,6640],{"class":1136},"        search ",[1095,6642,1140],{"class":1116},[1095,6644,3815],{"class":1711},[1095,6646,1124],{"class":1116},[1095,6648,6548],{"class":3363},[1095,6650,1124],{"class":1116},[1095,6652,6553],{"class":3363},[1095,6654,1124],{"class":1116},[1095,6656,6558],{"class":1148},[1095,6658,1117],{"class":1116},[1095,6660,1728],{"class":1228},[1095,6662,6663],{"class":1232},"search",[1095,6665,1728],{"class":1228},[1095,6667,1164],{"class":1116},[1095,6669,6670,6672,6675],{"class":1097,"line":2230},[1095,6671,5921],{"class":1670},[1095,6673,6674],{"class":1136}," search",[1095,6676,5557],{"class":1116},[1095,6678,6679,6681,6683,6685,6687,6689],{"class":1097,"line":2251},[1095,6680,6590],{"class":1136},[1095,6682,1140],{"class":1116},[1095,6684,6595],{"class":1136},[1095,6686,1124],{"class":1116},[1095,6688,6600],{"class":1148},[1095,6690,6691],{"class":1116},"(\n",[1095,6693,6694,6697,6699,6702,6704,6706,6709],{"class":1097,"line":2257},[1095,6695,6696],{"class":1148},"                Q",[1095,6698,1117],{"class":1116},[1095,6700,6701],{"class":1154},"username__icontains",[1095,6703,1140],{"class":1116},[1095,6705,6663],{"class":1148},[1095,6707,6708],{"class":1116},")",[1095,6710,6711],{"class":1986}," |\n",[1095,6713,6714,6716,6718,6721,6723,6725,6727],{"class":1097,"line":2263},[1095,6715,6696],{"class":1148},[1095,6717,1117],{"class":1116},[1095,6719,6720],{"class":1154},"email__icontains",[1095,6722,1140],{"class":1116},[1095,6724,6663],{"class":1148},[1095,6726,6708],{"class":1116},[1095,6728,6711],{"class":1986},[1095,6730,6731,6733,6735,6738,6740,6742,6744],{"class":1097,"line":2887},[1095,6732,6696],{"class":1148},[1095,6734,1117],{"class":1116},[1095,6736,6737],{"class":1154},"first_name__icontains",[1095,6739,1140],{"class":1116},[1095,6741,6663],{"class":1148},[1095,6743,6708],{"class":1116},[1095,6745,6711],{"class":1986},[1095,6747,6748,6750,6752,6755,6757,6759],{"class":1097,"line":2937},[1095,6749,6696],{"class":1148},[1095,6751,1117],{"class":1116},[1095,6753,6754],{"class":1154},"last_name__icontains",[1095,6756,1140],{"class":1116},[1095,6758,6663],{"class":1148},[1095,6760,1164],{"class":1116},[1095,6762,6763],{"class":1097,"line":2977},[1095,6764,6765],{"class":1116},"            )\n",[1095,6767,6768],{"class":1097,"line":3008},[1095,6769,5954],{"class":1136},[1095,6771,6772],{"class":1097,"line":3032},[1095,6773,6774],{"class":1101},"        # Date range filtering\n",[1095,6776,6777,6780,6782,6784,6786,6788,6790,6792,6794,6796,6798,6800,6803,6805],{"class":1097,"line":3038},[1095,6778,6779],{"class":1136},"        created_after ",[1095,6781,1140],{"class":1116},[1095,6783,3815],{"class":1711},[1095,6785,1124],{"class":1116},[1095,6787,6548],{"class":3363},[1095,6789,1124],{"class":1116},[1095,6791,6553],{"class":3363},[1095,6793,1124],{"class":1116},[1095,6795,6558],{"class":1148},[1095,6797,1117],{"class":1116},[1095,6799,1728],{"class":1228},[1095,6801,6802],{"class":1232},"created_after",[1095,6804,1728],{"class":1228},[1095,6806,1164],{"class":1116},[1095,6808,6809,6811,6814],{"class":1097,"line":3044},[1095,6810,5921],{"class":1670},[1095,6812,6813],{"class":1136}," created_after",[1095,6815,5557],{"class":1116},[1095,6817,6818,6821],{"class":1097,"line":3068},[1095,6819,6820],{"class":1670},"            try",[1095,6822,5557],{"class":1116},[1095,6824,6825,6828,6830,6832,6834,6837,6839,6841],{"class":1097,"line":3092},[1095,6826,6827],{"class":1136},"                date ",[1095,6829,1140],{"class":1116},[1095,6831,3728],{"class":1136},[1095,6833,1124],{"class":1116},[1095,6835,6836],{"class":1148},"fromisoformat",[1095,6838,1117],{"class":1116},[1095,6840,6802],{"class":1148},[1095,6842,1164],{"class":1116},[1095,6844,6845,6848,6850,6852,6854,6856,6858,6861,6863,6866],{"class":1097,"line":3117},[1095,6846,6847],{"class":1136},"                queryset ",[1095,6849,1140],{"class":1116},[1095,6851,6595],{"class":1136},[1095,6853,1124],{"class":1116},[1095,6855,6600],{"class":1148},[1095,6857,1117],{"class":1116},[1095,6859,6860],{"class":1154},"created_at__gte",[1095,6862,1140],{"class":1116},[1095,6864,6865],{"class":1148},"date",[1095,6867,1164],{"class":1116},[1095,6869,6870,6873,6876],{"class":1097,"line":3133},[1095,6871,6872],{"class":1670},"            except",[1095,6874,6875],{"class":1836}," ValueError",[1095,6877,5557],{"class":1116},[1095,6879,6880],{"class":1097,"line":3150},[1095,6881,6882],{"class":1670},"                pass\n",[1095,6884,6885],{"class":1097,"line":3155},[1095,6886,5954],{"class":1136},[1095,6888,6889,6891,6893,6895,6898,6900,6902,6905,6907],{"class":1097,"line":3161},[1095,6890,3740],{"class":1670},[1095,6892,6595],{"class":1136},[1095,6894,1124],{"class":1116},[1095,6896,6897],{"class":1148},"order_by",[1095,6899,1117],{"class":1116},[1095,6901,1728],{"class":1228},[1095,6903,6904],{"class":1232},"-created_at",[1095,6906,1728],{"class":1228},[1095,6908,1164],{"class":1116},[1095,6910,6911],{"class":1097,"line":3194},[1095,6912,3035],{"class":1136},[1095,6914,6915,6918,6920,6922,6925,6927,6929,6931,6934,6936,6938,6941,6943],{"class":1097,"line":3223},[1095,6916,6917],{"class":1116},"    @",[1095,6919,4846],{"class":3675},[1095,6921,1117],{"class":1116},[1095,6923,6924],{"class":1154},"detail",[1095,6926,1140],{"class":1116},[1095,6928,2385],{"class":1400},[1095,6930,1470],{"class":1116},[1095,6932,6933],{"class":1154}," methods",[1095,6935,2696],{"class":1116},[1095,6937,1728],{"class":1228},[1095,6939,6940],{"class":1232},"post",[1095,6942,1728],{"class":1228},[1095,6944,2713],{"class":1116},[1095,6946,6947,6949,6952,6954,6956,6958,6961,6963,6966,6968,6971],{"class":1097,"line":3252},[1095,6948,3672],{"class":1108},[1095,6950,6951],{"class":3675}," add_address",[1095,6953,1117],{"class":1116},[1095,6955,3682],{"class":3681},[1095,6957,1470],{"class":1116},[1095,6959,6960],{"class":3690}," request",[1095,6962,1470],{"class":1116},[1095,6964,6965],{"class":3690}," pk",[1095,6967,1140],{"class":1986},[1095,6969,6970],{"class":1400},"None",[1095,6972,1130],{"class":1116},[1095,6974,6975,6977,6980],{"class":1097,"line":3257},[1095,6976,3707],{"class":2343},[1095,6978,6979],{"class":2347},"Add address to user",[1095,6981,2351],{"class":2343},[1095,6983,6984,6987],{"class":1097,"line":3263},[1095,6985,6986],{"class":1670},"        try",[1095,6988,5557],{"class":1116},[1095,6990,6991,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7015],{"class":1097,"line":3287},[1095,6992,6993],{"class":1136},"            user ",[1095,6995,1140],{"class":1116},[1095,6997,1113],{"class":1136},[1095,6999,1124],{"class":1116},[1095,7001,6420],{"class":3363},[1095,7003,1124],{"class":1116},[1095,7005,6558],{"class":1148},[1095,7007,1117],{"class":1116},[1095,7009,3808],{"class":1154},[1095,7011,1140],{"class":1116},[1095,7013,7014],{"class":1148},"pk",[1095,7016,1164],{"class":1116},[1095,7018,7019,7022,7024,7026,7028],{"class":1097,"line":3311},[1095,7020,7021],{"class":1136},"            address_data ",[1095,7023,1140],{"class":1116},[1095,7025,6960],{"class":1136},[1095,7027,1124],{"class":1116},[1095,7029,7030],{"class":3363},"data\n",[1095,7032,7033],{"class":1097,"line":3327},[1095,7034,7035],{"class":1136},"            \n",[1095,7037,7038],{"class":1097,"line":3332},[1095,7039,7040],{"class":1101},"            # Validate address data\n",[1095,7042,7043,7046,7048,7050,7052],{"class":1097,"line":3338},[1095,7044,7045],{"class":1670},"            from",[1095,7047,4953],{"class":1116},[1095,7049,4956],{"class":1136},[1095,7051,1671],{"class":1670},[1095,7053,7054],{"class":1136}," Address\n",[1095,7056,7057,7060,7062,7064,7066,7068,7071],{"class":1097,"line":3369},[1095,7058,7059],{"class":1136},"            address ",[1095,7061,1140],{"class":1116},[1095,7063,2331],{"class":1148},[1095,7065,1117],{"class":1116},[1095,7067,1987],{"class":1986},[1095,7069,7070],{"class":1148},"address_data",[1095,7072,1164],{"class":1116},[1095,7074,7075,7078,7080,7083],{"class":1097,"line":3397},[1095,7076,7077],{"class":1136},"            address",[1095,7079,1124],{"class":1116},[1095,7081,7082],{"class":1148},"validate",[1095,7084,1182],{"class":1116},[1095,7086,7087],{"class":1097,"line":3413},[1095,7088,7035],{"class":1136},[1095,7090,7091],{"class":1097,"line":3418},[1095,7092,7093],{"class":1101},"            # If this is primary address, unset others\n",[1095,7095,7096,7099,7102,7104,7106,7108,7110,7113,7115,7117,7119],{"class":1097,"line":3424},[1095,7097,7098],{"class":1670},"            if",[1095,7100,7101],{"class":1136}," address_data",[1095,7103,1124],{"class":1116},[1095,7105,6558],{"class":1148},[1095,7107,1117],{"class":1116},[1095,7109,1728],{"class":1228},[1095,7111,7112],{"class":1232},"is_primary",[1095,7114,1728],{"class":1228},[1095,7116,1470],{"class":1116},[1095,7118,1954],{"class":1400},[1095,7120,1130],{"class":1116},[1095,7122,7123,7126,7128,7130,7133,7135,7137],{"class":1097,"line":3434},[1095,7124,7125],{"class":1670},"                for",[1095,7127,3973],{"class":1136},[1095,7129,3976],{"class":1670},[1095,7131,7132],{"class":1136}," user",[1095,7134,1124],{"class":1116},[1095,7136,3946],{"class":3363},[1095,7138,5557],{"class":1116},[1095,7140,7141,7144,7146,7148,7150],{"class":1097,"line":3455},[1095,7142,7143],{"class":1136},"                    addr",[1095,7145,1124],{"class":1116},[1095,7147,7112],{"class":3363},[1095,7149,1715],{"class":1116},[1095,7151,1418],{"class":1400},[1095,7153,7154],{"class":1097,"line":3469},[1095,7155,7035],{"class":1136},[1095,7157,7158,7161,7163,7165,7167,7170,7172,7175],{"class":1097,"line":3480},[1095,7159,7160],{"class":1136},"            user",[1095,7162,1124],{"class":1116},[1095,7164,3946],{"class":3363},[1095,7166,1124],{"class":1116},[1095,7168,7169],{"class":1148},"append",[1095,7171,1117],{"class":1116},[1095,7173,7174],{"class":1148},"address",[1095,7176,1164],{"class":1116},[1095,7178,7179,7181,7183,7185],{"class":1097,"line":3491},[1095,7180,7160],{"class":1136},[1095,7182,1124],{"class":1116},[1095,7184,3749],{"class":1148},[1095,7186,1182],{"class":1116},[1095,7188,7189],{"class":1097,"line":3502},[1095,7190,7035],{"class":1136},[1095,7192,7193,7195,7198,7201,7203,7206,7208,7210,7212,7215,7217],{"class":1097,"line":3525},[1095,7194,6481],{"class":1670},[1095,7196,7197],{"class":1148}," Response",[1095,7199,7200],{"class":1116},"({",[1095,7202,1728],{"class":1228},[1095,7204,7205],{"class":1232},"message",[1095,7207,1728],{"class":1228},[1095,7209,1239],{"class":1116},[1095,7211,2038],{"class":1228},[1095,7213,7214],{"class":1232},"Address added successfully",[1095,7216,1728],{"class":1228},[1095,7218,7219],{"class":1116},"})\n",[1095,7221,7222],{"class":1097,"line":3531},[1095,7223,5954],{"class":1136},[1095,7225,7226,7229,7232],{"class":1097,"line":3574},[1095,7227,7228],{"class":1670},"        except",[1095,7230,7231],{"class":1136}," DoesNotExist",[1095,7233,5557],{"class":1116},[1095,7235,7236,7238,7240,7242,7244,7247,7249,7251,7253,7256,7258,7261,7264,7266,7269,7271,7275],{"class":1097,"line":3595},[1095,7237,6481],{"class":1670},[1095,7239,7197],{"class":1148},[1095,7241,7200],{"class":1116},[1095,7243,1728],{"class":1228},[1095,7245,7246],{"class":1232},"error",[1095,7248,1728],{"class":1228},[1095,7250,1239],{"class":1116},[1095,7252,2038],{"class":1228},[1095,7254,7255],{"class":1232},"User not found",[1095,7257,1728],{"class":1228},[1095,7259,7260],{"class":1116},"},",[1095,7262,7263],{"class":1154}," status",[1095,7265,1140],{"class":1116},[1095,7267,7268],{"class":1148},"status",[1095,7270,1124],{"class":1116},[1095,7272,7274],{"class":7273},"sFGJz","HTTP_404_NOT_FOUND",[1095,7276,1164],{"class":1116},[1095,7278,7279,7281,7284,7287,7290],{"class":1097,"line":3649},[1095,7280,7228],{"class":1670},[1095,7282,7283],{"class":1836}," Exception",[1095,7285,7286],{"class":1670}," as",[1095,7288,7289],{"class":1136}," e",[1095,7291,5557],{"class":1116},[1095,7293,7294,7296,7298,7300,7302,7304,7306,7308,7310,7312,7315,7318,7320,7322,7324,7326,7329],{"class":1097,"line":3654},[1095,7295,6481],{"class":1670},[1095,7297,7197],{"class":1148},[1095,7299,7200],{"class":1116},[1095,7301,1728],{"class":1228},[1095,7303,7246],{"class":1232},[1095,7305,1728],{"class":1228},[1095,7307,1239],{"class":1116},[1095,7309,2921],{"class":1836},[1095,7311,1117],{"class":1116},[1095,7313,7314],{"class":1148},"e",[1095,7316,7317],{"class":1116},")},",[1095,7319,7263],{"class":1154},[1095,7321,1140],{"class":1116},[1095,7323,7268],{"class":1148},[1095,7325,1124],{"class":1116},[1095,7327,7328],{"class":7273},"HTTP_400_BAD_REQUEST",[1095,7330,1164],{"class":1116},[1095,7332,7333],{"class":1097,"line":3659},[1095,7334,3035],{"class":1136},[1095,7336,7337,7339,7341,7343,7345,7347,7349,7351,7353,7355,7357,7359,7361],{"class":1097,"line":3664},[1095,7338,6917],{"class":1116},[1095,7340,4846],{"class":3675},[1095,7342,1117],{"class":1116},[1095,7344,6924],{"class":1154},[1095,7346,1140],{"class":1116},[1095,7348,2385],{"class":1400},[1095,7350,1470],{"class":1116},[1095,7352,6933],{"class":1154},[1095,7354,2696],{"class":1116},[1095,7356,1728],{"class":1228},[1095,7358,6558],{"class":1232},[1095,7360,1728],{"class":1228},[1095,7362,2713],{"class":1116},[1095,7364,7365,7367,7370,7372,7374,7376,7378,7380,7382,7384,7386],{"class":1097,"line":3669},[1095,7366,3672],{"class":1108},[1095,7368,7369],{"class":3675}," activity_summary",[1095,7371,1117],{"class":1116},[1095,7373,3682],{"class":3681},[1095,7375,1470],{"class":1116},[1095,7377,6960],{"class":3690},[1095,7379,1470],{"class":1116},[1095,7381,6965],{"class":3690},[1095,7383,1140],{"class":1986},[1095,7385,6970],{"class":1400},[1095,7387,1130],{"class":1116},[1095,7389,7390,7392,7395],{"class":1097,"line":3704},[1095,7391,3707],{"class":2343},[1095,7393,7394],{"class":2347},"Get user activity summary",[1095,7396,2351],{"class":2343},[1095,7398,7399,7401],{"class":1097,"line":3715},[1095,7400,6986],{"class":1670},[1095,7402,5557],{"class":1116},[1095,7404,7405,7407,7409,7411,7413,7415,7417,7419,7421,7423,7425,7427],{"class":1097,"line":3737},[1095,7406,6993],{"class":1136},[1095,7408,1140],{"class":1116},[1095,7410,1113],{"class":1136},[1095,7412,1124],{"class":1116},[1095,7414,6420],{"class":3363},[1095,7416,1124],{"class":1116},[1095,7418,6558],{"class":1148},[1095,7420,1117],{"class":1116},[1095,7422,3808],{"class":1154},[1095,7424,1140],{"class":1116},[1095,7426,7014],{"class":1148},[1095,7428,1164],{"class":1116},[1095,7430,7431],{"class":1097,"line":3767},[1095,7432,7035],{"class":1136},[1095,7434,7435],{"class":1097,"line":3772},[1095,7436,7437],{"class":1101},"            # Aggregation pipeline for activity summary\n",[1095,7439,7440,7443,7445],{"class":1097,"line":3786},[1095,7441,7442],{"class":1136},"            pipeline ",[1095,7444,1140],{"class":1116},[1095,7446,1445],{"class":1116},[1095,7448,7449,7452,7454,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477],{"class":1097,"line":3796},[1095,7450,7451],{"class":1116},"                {",[1095,7453,1728],{"class":1228},[1095,7455,7456],{"class":1232},"$match",[1095,7458,1728],{"class":1228},[1095,7460,1239],{"class":1116},[1095,7462,3607],{"class":1116},[1095,7464,1728],{"class":1228},[1095,7466,4496],{"class":1232},[1095,7468,1728],{"class":1228},[1095,7470,1239],{"class":1116},[1095,7472,7132],{"class":1136},[1095,7474,1124],{"class":1116},[1095,7476,7014],{"class":3363},[1095,7478,7479],{"class":1116},"}},\n",[1095,7481,7482,7484,7486,7489,7491,7493],{"class":1097,"line":3803},[1095,7483,7451],{"class":1116},[1095,7485,1728],{"class":1228},[1095,7487,7488],{"class":1232},"$group",[1095,7490,1728],{"class":1228},[1095,7492,1239],{"class":1116},[1095,7494,1313],{"class":1116},[1095,7496,7497,7500,7502,7504,7506,7508,7511,7513],{"class":1097,"line":3824},[1095,7498,7499],{"class":1228},"                    '",[1095,7501,1233],{"class":1232},[1095,7503,1728],{"class":1228},[1095,7505,1239],{"class":1116},[1095,7507,2038],{"class":1228},[1095,7509,7510],{"class":1232},"$action",[1095,7512,1728],{"class":1228},[1095,7514,1277],{"class":1116},[1095,7516,7517,7519,7522,7524,7526,7528,7530,7533,7535,7537,7540],{"class":1097,"line":3843},[1095,7518,7499],{"class":1228},[1095,7520,7521],{"class":1232},"count",[1095,7523,1728],{"class":1228},[1095,7525,1239],{"class":1116},[1095,7527,3607],{"class":1116},[1095,7529,1728],{"class":1228},[1095,7531,7532],{"class":1232},"$sum",[1095,7534,1728],{"class":1228},[1095,7536,1239],{"class":1116},[1095,7538,7539],{"class":1160}," 1",[1095,7541,1489],{"class":1116},[1095,7543,7544,7546,7549,7551,7553,7555,7557,7560,7562,7564,7566,7569,7571],{"class":1097,"line":3862},[1095,7545,7499],{"class":1228},[1095,7547,7548],{"class":1232},"last_activity",[1095,7550,1728],{"class":1228},[1095,7552,1239],{"class":1116},[1095,7554,3607],{"class":1116},[1095,7556,1728],{"class":1228},[1095,7558,7559],{"class":1232},"$max",[1095,7561,1728],{"class":1228},[1095,7563,1239],{"class":1116},[1095,7565,2038],{"class":1228},[1095,7567,7568],{"class":1232},"$timestamp",[1095,7570,1728],{"class":1228},[1095,7572,1529],{"class":1116},[1095,7574,7575],{"class":1097,"line":3882},[1095,7576,7577],{"class":1116},"                }},\n",[1095,7579,7580,7582,7584,7587,7589,7591,7593,7595,7597,7599,7601,7604,7607],{"class":1097,"line":3902},[1095,7581,7451],{"class":1116},[1095,7583,1728],{"class":1228},[1095,7585,7586],{"class":1232},"$sort",[1095,7588,1728],{"class":1228},[1095,7590,1239],{"class":1116},[1095,7592,3607],{"class":1116},[1095,7594,1728],{"class":1228},[1095,7596,7521],{"class":1232},[1095,7598,1728],{"class":1228},[1095,7600,1239],{"class":1116},[1095,7602,7603],{"class":1986}," -",[1095,7605,7606],{"class":1160},"1",[1095,7608,7609],{"class":1116},"}}\n",[1095,7611,7612],{"class":1097,"line":3921},[1095,7613,7614],{"class":1116},"            ]\n",[1095,7616,7617],{"class":1097,"line":3941},[1095,7618,7035],{"class":1136},[1095,7620,7621,7624,7626,7629,7631,7634,7636,7638,7640,7643,7645,7648],{"class":1097,"line":3987},[1095,7622,7623],{"class":1136},"            activities ",[1095,7625,1140],{"class":1116},[1095,7627,7628],{"class":1836}," list",[1095,7630,1117],{"class":1116},[1095,7632,7633],{"class":1148},"UserActivity",[1095,7635,1124],{"class":1116},[1095,7637,6420],{"class":3363},[1095,7639,1124],{"class":1116},[1095,7641,7642],{"class":1148},"aggregate",[1095,7644,1117],{"class":1116},[1095,7646,7647],{"class":1148},"pipeline",[1095,7649,3191],{"class":1116},[1095,7651,7652],{"class":1097,"line":4028},[1095,7653,7035],{"class":1136},[1095,7655,7656,7658,7660],{"class":1097,"line":4070},[1095,7657,6481],{"class":1670},[1095,7659,7197],{"class":1148},[1095,7661,7662],{"class":1116},"({\n",[1095,7664,7665,7667,7669,7671,7673,7675,7677,7679],{"class":1097,"line":4089},[1095,7666,3534],{"class":1228},[1095,7668,3808],{"class":1232},[1095,7670,1728],{"class":1228},[1095,7672,1239],{"class":1116},[1095,7674,7132],{"class":1148},[1095,7676,1124],{"class":1116},[1095,7678,3808],{"class":3363},[1095,7680,1277],{"class":1116},[1095,7682,7683,7685,7688,7690,7692,7695],{"class":1097,"line":4109},[1095,7684,3534],{"class":1228},[1095,7686,7687],{"class":1232},"activity_summary",[1095,7689,1728],{"class":1228},[1095,7691,1239],{"class":1116},[1095,7693,7694],{"class":1148}," activities",[1095,7696,1277],{"class":1116},[1095,7698,7699,7701,7704,7706,7708,7710,7712,7714,7716,7718,7720,7722,7724,7726,7729,7731],{"class":1097,"line":4148},[1095,7700,3534],{"class":1228},[1095,7702,7703],{"class":1232},"total_activities",[1095,7705,1728],{"class":1228},[1095,7707,1239],{"class":1116},[1095,7709,4567],{"class":1148},[1095,7711,1124],{"class":1116},[1095,7713,6420],{"class":3363},[1095,7715,1124],{"class":1116},[1095,7717,6600],{"class":1148},[1095,7719,1117],{"class":1116},[1095,7721,4496],{"class":1154},[1095,7723,1140],{"class":1116},[1095,7725,4496],{"class":1148},[1095,7727,7728],{"class":1116},").",[1095,7730,7521],{"class":1148},[1095,7732,1182],{"class":1116},[1095,7734,7735],{"class":1097,"line":4185},[1095,7736,7737],{"class":1116},"            })\n",[1095,7739,7740],{"class":1097,"line":4222},[1095,7741,5954],{"class":1136},[1095,7743,7744,7746,7748],{"class":1097,"line":4227},[1095,7745,7228],{"class":1670},[1095,7747,7231],{"class":1136},[1095,7749,5557],{"class":1116},[1095,7751,7752,7754,7756,7758,7760,7762,7764,7766,7768,7770,7772,7774,7776,7778,7780,7782,7784],{"class":1097,"line":4232},[1095,7753,6481],{"class":1670},[1095,7755,7197],{"class":1148},[1095,7757,7200],{"class":1116},[1095,7759,1728],{"class":1228},[1095,7761,7246],{"class":1232},[1095,7763,1728],{"class":1228},[1095,7765,1239],{"class":1116},[1095,7767,2038],{"class":1228},[1095,7769,7255],{"class":1232},[1095,7771,1728],{"class":1228},[1095,7773,7260],{"class":1116},[1095,7775,7263],{"class":1154},[1095,7777,1140],{"class":1116},[1095,7779,7268],{"class":1148},[1095,7781,1124],{"class":1116},[1095,7783,7274],{"class":7273},[1095,7785,1164],{"class":1116},[1095,7787,7788],{"class":1097,"line":4246},[1095,7789,3035],{"class":1136},[1095,7791,7792,7794,7796,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816],{"class":1097,"line":4256},[1095,7793,6917],{"class":1116},[1095,7795,4846],{"class":3675},[1095,7797,1117],{"class":1116},[1095,7799,6924],{"class":1154},[1095,7801,1140],{"class":1116},[1095,7803,2521],{"class":1400},[1095,7805,1470],{"class":1116},[1095,7807,6933],{"class":1154},[1095,7809,2696],{"class":1116},[1095,7811,1728],{"class":1228},[1095,7813,6558],{"class":1232},[1095,7815,1728],{"class":1228},[1095,7817,2713],{"class":1116},[1095,7819,7820,7822,7825,7827,7829,7831,7833],{"class":1097,"line":4300},[1095,7821,3672],{"class":1108},[1095,7823,7824],{"class":3675}," analytics",[1095,7826,1117],{"class":1116},[1095,7828,3682],{"class":3681},[1095,7830,1470],{"class":1116},[1095,7832,6960],{"class":3690},[1095,7834,1130],{"class":1116},[1095,7836,7837,7839,7842],{"class":1097,"line":4330},[1095,7838,3707],{"class":2343},[1095,7840,7841],{"class":2347},"User analytics using MongoDB aggregation",[1095,7843,2351],{"class":2343},[1095,7845,7846,7849,7851],{"class":1097,"line":4346},[1095,7847,7848],{"class":1136},"        pipeline ",[1095,7850,1140],{"class":1116},[1095,7852,1445],{"class":1116},[1095,7854,7855],{"class":1097,"line":4362},[1095,7856,7857],{"class":1101},"            # Match active users\n",[1095,7859,7860,7862,7864,7866,7868,7870,7872,7874,7876,7878,7880,7882],{"class":1097,"line":4378},[1095,7861,1451],{"class":1116},[1095,7863,1728],{"class":1228},[1095,7865,7456],{"class":1232},[1095,7867,1728],{"class":1228},[1095,7869,1239],{"class":1116},[1095,7871,3607],{"class":1116},[1095,7873,1728],{"class":1228},[1095,7875,3518],{"class":1232},[1095,7877,1728],{"class":1228},[1095,7879,1239],{"class":1116},[1095,7881,1401],{"class":1400},[1095,7883,7479],{"class":1116},[1095,7885,7886],{"class":1097,"line":4405},[1095,7887,7035],{"class":1136},[1095,7889,7890],{"class":1097,"line":4421},[1095,7891,7892],{"class":1101},"            # Group by creation month\n",[1095,7894,7895,7897,7899,7901,7903,7905],{"class":1097,"line":4444},[1095,7896,1451],{"class":1116},[1095,7898,1728],{"class":1228},[1095,7900,7488],{"class":1232},[1095,7902,1728],{"class":1228},[1095,7904,1239],{"class":1116},[1095,7906,1313],{"class":1116},[1095,7908,7909,7911,7913,7915,7917],{"class":1097,"line":4449},[1095,7910,3534],{"class":1228},[1095,7912,1233],{"class":1232},[1095,7914,1728],{"class":1228},[1095,7916,1239],{"class":1116},[1095,7918,1313],{"class":1116},[1095,7920,7921,7923,7926,7928,7930,7932,7934,7937,7939,7941,7943,7946,7948],{"class":1097,"line":4458},[1095,7922,7499],{"class":1228},[1095,7924,7925],{"class":1232},"year",[1095,7927,1728],{"class":1228},[1095,7929,1239],{"class":1116},[1095,7931,3607],{"class":1116},[1095,7933,1728],{"class":1228},[1095,7935,7936],{"class":1232},"$year",[1095,7938,1728],{"class":1228},[1095,7940,1239],{"class":1116},[1095,7942,2038],{"class":1228},[1095,7944,7945],{"class":1232},"$created_at",[1095,7947,1728],{"class":1228},[1095,7949,1489],{"class":1116},[1095,7951,7952,7954,7957,7959,7961,7963,7965,7968,7970,7972,7974,7976,7978],{"class":1097,"line":4478},[1095,7953,7499],{"class":1228},[1095,7955,7956],{"class":1232},"month",[1095,7958,1728],{"class":1228},[1095,7960,1239],{"class":1116},[1095,7962,3607],{"class":1116},[1095,7964,1728],{"class":1228},[1095,7966,7967],{"class":1232},"$month",[1095,7969,1728],{"class":1228},[1095,7971,1239],{"class":1116},[1095,7973,2038],{"class":1228},[1095,7975,7945],{"class":1232},[1095,7977,1728],{"class":1228},[1095,7979,1529],{"class":1116},[1095,7981,7982],{"class":1097,"line":4491},[1095,7983,7984],{"class":1116},"                },\n",[1095,7986,7987,7989,7992,7994,7996,7998,8000,8002,8004,8006,8008],{"class":1097,"line":4503},[1095,7988,3534],{"class":1228},[1095,7990,7991],{"class":1232},"user_count",[1095,7993,1728],{"class":1228},[1095,7995,1239],{"class":1116},[1095,7997,3607],{"class":1116},[1095,7999,1728],{"class":1228},[1095,8001,7532],{"class":1232},[1095,8003,1728],{"class":1228},[1095,8005,1239],{"class":1116},[1095,8007,7539],{"class":1160},[1095,8009,1489],{"class":1116},[1095,8011,8012,8014,8017,8019,8021],{"class":1097,"line":4514},[1095,8013,3534],{"class":1228},[1095,8015,8016],{"class":1232},"verified_count",[1095,8018,1728],{"class":1228},[1095,8020,1239],{"class":1116},[1095,8022,1313],{"class":1116},[1095,8024,8025,8027,8029,8031,8033,8035,8037,8040,8042,8044,8047,8049,8052,8054,8056,8058,8060,8063,8065,8067,8069,8072,8074,8076,8079],{"class":1097,"line":4526},[1095,8026,7499],{"class":1228},[1095,8028,7532],{"class":1232},[1095,8030,1728],{"class":1228},[1095,8032,1239],{"class":1116},[1095,8034,3607],{"class":1116},[1095,8036,1728],{"class":1228},[1095,8038,8039],{"class":1232},"$cond",[1095,8041,1728],{"class":1228},[1095,8043,1239],{"class":1116},[1095,8045,8046],{"class":1116}," [{",[1095,8048,1728],{"class":1228},[1095,8050,8051],{"class":1232},"$eq",[1095,8053,1728],{"class":1228},[1095,8055,1239],{"class":1116},[1095,8057,3543],{"class":1116},[1095,8059,1728],{"class":1228},[1095,8061,8062],{"class":1232},"$is_verified",[1095,8064,1728],{"class":1228},[1095,8066,1470],{"class":1116},[1095,8068,1401],{"class":1400},[1095,8070,8071],{"class":1116},"]},",[1095,8073,7539],{"class":1160},[1095,8075,1470],{"class":1116},[1095,8077,8078],{"class":1160}," 0",[1095,8080,8081],{"class":1116},"]}\n",[1095,8083,8084],{"class":1097,"line":4547},[1095,8085,8086],{"class":1116},"                }\n",[1095,8088,8089],{"class":1097,"line":4552},[1095,8090,8091],{"class":1116},"            }},\n",[1095,8093,8094],{"class":1097,"line":4557},[1095,8095,7035],{"class":1136},[1095,8097,8098],{"class":1097,"line":4562},[1095,8099,8100],{"class":1101},"            # Sort by date\n",[1095,8102,8103,8105,8107,8109,8111,8113,8115,8117,8120,8122,8124,8126,8128,8130,8132,8135,8137,8139,8141,8143],{"class":1097,"line":4576},[1095,8104,1451],{"class":1116},[1095,8106,1728],{"class":1228},[1095,8108,7586],{"class":1232},[1095,8110,1728],{"class":1228},[1095,8112,1239],{"class":1116},[1095,8114,3607],{"class":1116},[1095,8116,1728],{"class":1228},[1095,8118,8119],{"class":1232},"_id.year",[1095,8121,1728],{"class":1228},[1095,8123,1239],{"class":1116},[1095,8125,7603],{"class":1986},[1095,8127,7606],{"class":1160},[1095,8129,1470],{"class":1116},[1095,8131,2038],{"class":1228},[1095,8133,8134],{"class":1232},"_id.month",[1095,8136,1728],{"class":1228},[1095,8138,1239],{"class":1116},[1095,8140,7603],{"class":1986},[1095,8142,7606],{"class":1160},[1095,8144,7479],{"class":1116},[1095,8146,8147],{"class":1097,"line":4586},[1095,8148,7035],{"class":1136},[1095,8150,8151],{"class":1097,"line":4630},[1095,8152,8153],{"class":1101},"            # Limit to last 12 months\n",[1095,8155,8156,8158,8160,8163,8165,8167,8170],{"class":1097,"line":4657},[1095,8157,1451],{"class":1116},[1095,8159,1728],{"class":1228},[1095,8161,8162],{"class":1232},"$limit",[1095,8164,1728],{"class":1228},[1095,8166,1239],{"class":1116},[1095,8168,8169],{"class":1160}," 12",[1095,8171,1529],{"class":1116},[1095,8173,8174],{"class":1097,"line":4681},[1095,8175,1535],{"class":1116},[1095,8177,8178],{"class":1097,"line":4697},[1095,8179,5954],{"class":1136},[1095,8181,8182,8185,8187,8189,8191,8193,8195,8197,8199,8201,8203,8205],{"class":1097,"line":4713},[1095,8183,8184],{"class":1136},"        analytics_data ",[1095,8186,1140],{"class":1116},[1095,8188,7628],{"class":1836},[1095,8190,1117],{"class":1116},[1095,8192,4317],{"class":1148},[1095,8194,1124],{"class":1116},[1095,8196,6420],{"class":3363},[1095,8198,1124],{"class":1116},[1095,8200,7642],{"class":1148},[1095,8202,1117],{"class":1116},[1095,8204,7647],{"class":1148},[1095,8206,3191],{"class":1116},[1095,8208,8209],{"class":1097,"line":4728},[1095,8210,5954],{"class":1136},[1095,8212,8213,8215,8217],{"class":1097,"line":4743},[1095,8214,3740],{"class":1670},[1095,8216,7197],{"class":1148},[1095,8218,7662],{"class":1116},[1095,8220,8221,8223,8226,8228,8230,8233],{"class":1097,"line":4771},[1095,8222,2098],{"class":1228},[1095,8224,8225],{"class":1232},"monthly_registrations",[1095,8227,1728],{"class":1228},[1095,8229,1239],{"class":1116},[1095,8231,8232],{"class":1148}," analytics_data",[1095,8234,1277],{"class":1116},[1095,8236,8237,8239,8242,8244,8246,8248,8250,8252,8254,8256],{"class":1097,"line":4776},[1095,8238,2098],{"class":1228},[1095,8240,8241],{"class":1232},"total_users",[1095,8243,1728],{"class":1228},[1095,8245,1239],{"class":1116},[1095,8247,1113],{"class":1148},[1095,8249,1124],{"class":1116},[1095,8251,6420],{"class":3363},[1095,8253,1124],{"class":1116},[1095,8255,7521],{"class":1148},[1095,8257,8258],{"class":1116},"(),\n",[1095,8260,8261,8263,8266,8268,8270,8272,8274,8276,8278,8280,8282,8284,8286,8288,8290,8292],{"class":1097,"line":4785},[1095,8262,2098],{"class":1228},[1095,8264,8265],{"class":1232},"active_users",[1095,8267,1728],{"class":1228},[1095,8269,1239],{"class":1116},[1095,8271,1113],{"class":1148},[1095,8273,1124],{"class":1116},[1095,8275,6420],{"class":3363},[1095,8277,1124],{"class":1116},[1095,8279,6600],{"class":1148},[1095,8281,1117],{"class":1116},[1095,8283,3518],{"class":1154},[1095,8285,1140],{"class":1116},[1095,8287,2385],{"class":1400},[1095,8289,7728],{"class":1116},[1095,8291,7521],{"class":1148},[1095,8293,8258],{"class":1116},[1095,8295,8296,8298,8301,8303,8305,8307,8309,8311,8313,8315,8317,8319,8321,8323,8325,8327],{"class":1097,"line":4805},[1095,8297,2098],{"class":1228},[1095,8299,8300],{"class":1232},"verified_users",[1095,8302,1728],{"class":1228},[1095,8304,1239],{"class":1116},[1095,8306,1113],{"class":1148},[1095,8308,1124],{"class":1116},[1095,8310,6420],{"class":3363},[1095,8312,1124],{"class":1116},[1095,8314,6600],{"class":1148},[1095,8316,1117],{"class":1116},[1095,8318,4094],{"class":1154},[1095,8320,1140],{"class":1116},[1095,8322,2385],{"class":1400},[1095,8324,7728],{"class":1116},[1095,8326,7521],{"class":1148},[1095,8328,1182],{"class":1116},[1095,8330,8331],{"class":1097,"line":4818},[1095,8332,8333],{"class":1116},"        })\n",[1095,8335,8336],{"class":1097,"line":4829},[1095,8337,1210],{"emptyLinePlaceholder":1209},[1095,8339,8340,8343,8346,8349,8351,8354,8356],{"class":1097,"line":4841},[1095,8341,8342],{"class":1116},"@",[1095,8344,8345],{"class":3675},"api_view",[1095,8347,8348],{"class":1116},"([",[1095,8350,1728],{"class":1228},[1095,8352,8353],{"class":1232},"GET",[1095,8355,1728],{"class":1228},[1095,8357,2713],{"class":1116},[1095,8359,8360,8363,8366,8368,8370],{"class":1097,"line":4853},[1095,8361,8362],{"class":1108},"def",[1095,8364,8365],{"class":3675}," user_search",[1095,8367,1117],{"class":1116},[1095,8369,6548],{"class":3690},[1095,8371,1130],{"class":1116},[1095,8373,8374,8376,8379],{"class":1097,"line":4874},[1095,8375,2344],{"class":2343},[1095,8377,8378],{"class":2347},"Advanced user search with text indexing",[1095,8380,2351],{"class":2343},[1095,8382,8383,8386,8388,8390,8392,8394,8396,8398,8400,8402,8405,8407,8409,8412],{"class":1097,"line":4895},[1095,8384,8385],{"class":1136},"    query ",[1095,8387,1140],{"class":1116},[1095,8389,6960],{"class":1136},[1095,8391,1124],{"class":1116},[1095,8393,8353],{"class":7273},[1095,8395,1124],{"class":1116},[1095,8397,6558],{"class":1148},[1095,8399,1117],{"class":1116},[1095,8401,1728],{"class":1228},[1095,8403,8404],{"class":1232},"q",[1095,8406,1728],{"class":1228},[1095,8408,1470],{"class":1116},[1095,8410,8411],{"class":1228}," ''",[1095,8413,1164],{"class":1116},[1095,8415,8416,8419,8421,8424],{"class":1097,"line":4900},[1095,8417,8418],{"class":1670},"    if",[1095,8420,6581],{"class":1986},[1095,8422,8423],{"class":1136}," query",[1095,8425,5557],{"class":1116},[1095,8427,8429,8431,8433,8435,8437,8439,8441,8443,8445,8448,8450,8452],{"class":1097,"line":8428},145,[1095,8430,3740],{"class":1670},[1095,8432,7197],{"class":1148},[1095,8434,7200],{"class":1116},[1095,8436,1728],{"class":1228},[1095,8438,7246],{"class":1232},[1095,8440,1728],{"class":1228},[1095,8442,1239],{"class":1116},[1095,8444,2038],{"class":1228},[1095,8446,8447],{"class":1232},"Query parameter q is required",[1095,8449,1728],{"class":1228},[1095,8451,7260],{"class":1116},[1095,8453,8454],{"class":1148}," \n",[1095,8456,8458,8461,8463,8465,8467,8469],{"class":1097,"line":8457},146,[1095,8459,8460],{"class":1154},"                       status",[1095,8462,1140],{"class":1116},[1095,8464,7268],{"class":1148},[1095,8466,1124],{"class":1116},[1095,8468,7328],{"class":7273},[1095,8470,1164],{"class":1116},[1095,8472,8474],{"class":1097,"line":8473},147,[1095,8475,3035],{"class":1136},[1095,8477,8479],{"class":1097,"line":8478},148,[1095,8480,8481],{"class":1101},"    # Use MongoDB text search\n",[1095,8483,8485,8488,8490,8492,8494,8496,8498,8501,8503,8506,8508,8510,8512,8514,8517,8519],{"class":1097,"line":8484},149,[1095,8486,8487],{"class":1136},"    users ",[1095,8489,1140],{"class":1116},[1095,8491,1113],{"class":1136},[1095,8493,1124],{"class":1116},[1095,8495,6420],{"class":3363},[1095,8497,1124],{"class":1116},[1095,8499,8500],{"class":1148},"search_text",[1095,8502,1117],{"class":1116},[1095,8504,8505],{"class":1148},"query",[1095,8507,7728],{"class":1116},[1095,8509,6897],{"class":1148},[1095,8511,1117],{"class":1116},[1095,8513,1728],{"class":1228},[1095,8515,8516],{"class":1232},"$text_score",[1095,8518,1728],{"class":1228},[1095,8520,1164],{"class":1116},[1095,8522,8524],{"class":1097,"line":8523},150,[1095,8525,3035],{"class":1136},[1095,8527,8529],{"class":1097,"line":8528},151,[1095,8530,8531],{"class":1101},"    # Limit results\n",[1095,8533,8535,8538,8540,8543,8545,8547,8549,8551,8553,8555,8557,8559,8561,8563,8566,8568,8570,8573,8576,8579],{"class":1097,"line":8534},152,[1095,8536,8537],{"class":1136},"    limit ",[1095,8539,1140],{"class":1116},[1095,8541,8542],{"class":5984}," min",[1095,8544,1117],{"class":1116},[1095,8546,1837],{"class":1836},[1095,8548,1117],{"class":1116},[1095,8550,6548],{"class":1148},[1095,8552,1124],{"class":1116},[1095,8554,8353],{"class":7273},[1095,8556,1124],{"class":1116},[1095,8558,6558],{"class":1148},[1095,8560,1117],{"class":1116},[1095,8562,1728],{"class":1228},[1095,8564,8565],{"class":1232},"limit",[1095,8567,1728],{"class":1228},[1095,8569,1470],{"class":1116},[1095,8571,8572],{"class":1160}," 20",[1095,8574,8575],{"class":1116},")),",[1095,8577,8578],{"class":1160}," 100",[1095,8580,1164],{"class":1116},[1095,8582,8584,8586,8588,8591,8594,8596],{"class":1097,"line":8583},153,[1095,8585,8487],{"class":1136},[1095,8587,1140],{"class":1116},[1095,8589,8590],{"class":1136}," users",[1095,8592,8593],{"class":1116},"[:",[1095,8595,8565],{"class":1136},[1095,8597,5758],{"class":1116},[1095,8599,8601],{"class":1097,"line":8600},154,[1095,8602,3035],{"class":1136},[1095,8604,8606,8609,8611,8613,8615,8617,8619,8622,8624,8626],{"class":1097,"line":8605},155,[1095,8607,8608],{"class":1136},"    serializer ",[1095,8610,1140],{"class":1116},[1095,8612,6096],{"class":1148},[1095,8614,1117],{"class":1116},[1095,8616,3448],{"class":1148},[1095,8618,1470],{"class":1116},[1095,8620,8621],{"class":1154}," many",[1095,8623,1140],{"class":1116},[1095,8625,2385],{"class":1400},[1095,8627,1164],{"class":1116},[1095,8629,8631,8634,8636],{"class":1097,"line":8630},156,[1095,8632,8633],{"class":1670},"    return",[1095,8635,7197],{"class":1148},[1095,8637,7662],{"class":1116},[1095,8639,8641,8643,8645,8647,8649,8651],{"class":1097,"line":8640},157,[1095,8642,2028],{"class":1228},[1095,8644,8505],{"class":1232},[1095,8646,1728],{"class":1228},[1095,8648,1239],{"class":1116},[1095,8650,8423],{"class":1148},[1095,8652,1277],{"class":1116},[1095,8654,8656,8658,8661,8663,8665,8668,8670,8673],{"class":1097,"line":8655},158,[1095,8657,2028],{"class":1228},[1095,8659,8660],{"class":1232},"results",[1095,8662,1728],{"class":1228},[1095,8664,1239],{"class":1116},[1095,8666,8667],{"class":1148}," serializer",[1095,8669,1124],{"class":1116},[1095,8671,8672],{"class":3363},"data",[1095,8674,1277],{"class":1116},[1095,8676,8678,8680,8682,8684,8686,8689,8691,8694,8696,8698],{"class":1097,"line":8677},159,[1095,8679,2028],{"class":1228},[1095,8681,7521],{"class":1232},[1095,8683,1728],{"class":1228},[1095,8685,1239],{"class":1116},[1095,8687,8688],{"class":5984}," len",[1095,8690,1117],{"class":1116},[1095,8692,8693],{"class":1148},"serializer",[1095,8695,1124],{"class":1116},[1095,8697,8672],{"class":3363},[1095,8699,1164],{"class":1116},[1095,8701,8703],{"class":1097,"line":8702},160,[1095,8704,2853],{"class":1116},[1030,8706,8708],{"id":8707},"advanced-mongodb-features","Advanced MongoDB Features",[1035,8710,8712],{"id":8711},"_1-aggregation-pipelines","1. Aggregation Pipelines",[1085,8714,8716],{"className":1087,"code":8715,"language":1089,"meta":1090,"style":1090},"# aggregation.py\nfrom mongoengine import Document\nfrom datetime import datetime, timedelta\n\nclass UserAnalytics:\n    \"\"\"Advanced analytics using MongoDB aggregation\"\"\"\n    \n    @staticmethod\n    def user_engagement_report():\n        \"\"\"Generate user engagement report\"\"\"\n        pipeline = [\n            # Match users from last 30 days\n            {'$match': {\n                'created_at': {'$gte': datetime.utcnow() - timedelta(days=30)}\n            }},\n            \n            # Lookup user activities\n            {'$lookup': {\n                'from': 'user_activities',\n                'localField': '_id',\n                'foreignField': 'user',\n                'as': 'activities'\n            }},\n            \n            # Add computed fields\n            {'$addFields': {\n                'activity_count': {'$size': '$activities'},\n                'last_activity': {'$max': '$activities.timestamp'},\n                'unique_actions': {'$size': {'$setUnion': '$activities.action'}}\n            }},\n            \n            # Group by engagement level\n            {'$group': {\n                '_id': {\n                    '$switch': {\n                        'branches': [\n                            {'case': {'$gte': ['$activity_count', 50]}, 'then': 'high'},\n                            {'case': {'$gte': ['$activity_count', 10]}, 'then': 'medium'},\n                            {'case': {'$gt': ['$activity_count', 0]}, 'then': 'low'}\n                        ],\n                        'default': 'inactive'\n                    }\n                },\n                'user_count': {'$sum': 1},\n                'avg_activities': {'$avg': '$activity_count'},\n                'avg_unique_actions': {'$avg': '$unique_actions'}\n            }},\n            \n            {'$sort': {'user_count': -1}}\n        ]\n        \n        return list(User.objects.aggregate(pipeline))\n    \n    @staticmethod\n    def geographic_distribution():\n        \"\"\"Analyze user geographic distribution\"\"\"\n        pipeline = [\n            # Unwind addresses array\n            {'$unwind': '$addresses'},\n            \n            # Match primary addresses only\n            {'$match': {'addresses.is_primary': True}},\n            \n            # Group by country and state\n            {'$group': {\n                '_id': {\n                    'country': '$addresses.country',\n                    'state': '$addresses.state'\n                },\n                'user_count': {'$sum': 1}\n            }},\n            \n            # Group by country\n            {'$group': {\n                '_id': '$_id.country',\n                'total_users': {'$sum': '$user_count'},\n                'states': {\n                    '$push': {\n                        'state': '$_id.state',\n                        'user_count': '$user_count'\n                    }\n                }\n            }},\n            \n            {'$sort': {'total_users': -1}}\n        ]\n        \n        return list(User.objects.aggregate(pipeline))\n    \n    @staticmethod\n    def user_preferences_analysis():\n        \"\"\"Analyze user preferences\"\"\"\n        pipeline = [\n            # Match users with preferences\n            {'$match': {'preferences': {'$exists': True}}},\n            \n            # Group by theme preference\n            {'$group': {\n                '_id': '$preferences.theme',\n                'count': {'$sum': 1},\n                'languages': {'$addToSet': '$preferences.language'},\n                'avg_notifications': {\n                    '$avg': {\n                        '$add': [\n                            {'$cond': [{'$eq': ['$preferences.notifications.email', True]}, 1, 0]},\n                            {'$cond': [{'$eq': ['$preferences.notifications.push', True]}, 1, 0]},\n                            {'$cond': [{'$eq': ['$preferences.notifications.sms', True]}, 1, 0]}\n                        ]\n                    }\n                }\n            }},\n            \n            {'$sort': {'count': -1}}\n        ]\n        \n        return list(User.objects.aggregate(pipeline))\n",[1092,8717,8718,8723,8734,8748,8752,8761,8770,8774,8781,8790,8799,8807,8812,8826,8873,8877,8881,8886,8901,8919,8938,8957,8974,8978,8982,8987,9002,9033,9062,9103,9107,9111,9116,9130,9142,9155,9169,9227,9280,9334,9339,9356,9361,9365,9389,9419,9449,9453,9457,9485,9489,9493,9517,9521,9527,9536,9545,9553,9558,9580,9584,9589,9616,9620,9625,9639,9651,9671,9689,9693,9717,9721,9725,9730,9744,9763,9792,9805,9818,9837,9853,9857,9861,9865,9869,9897,9901,9905,9929,9933,9939,9948,9957,9965,9970,10008,10012,10017,10031,10050,10074,10105,10118,10130,10143,10189,10234,10279,10284,10288,10292,10296,10300,10328,10332,10336],{"__ignoreMap":1090},[1095,8719,8720],{"class":1097,"line":1098},[1095,8721,8722],{"class":1101},"# aggregation.py\n",[1095,8724,8725,8727,8729,8731],{"class":1097,"line":1105},[1095,8726,1679],{"class":1670},[1095,8728,2286],{"class":1136},[1095,8730,1671],{"class":1670},[1095,8732,8733],{"class":1136}," Document\n",[1095,8735,8736,8738,8740,8742,8744,8746],{"class":1097,"line":1133},[1095,8737,1679],{"class":1670},[1095,8739,2308],{"class":1136},[1095,8741,1671],{"class":1670},[1095,8743,3728],{"class":1136},[1095,8745,1470],{"class":1116},[1095,8747,6348],{"class":1136},[1095,8749,8750],{"class":1097,"line":1167},[1095,8751,1210],{"emptyLinePlaceholder":1209},[1095,8753,8754,8756,8759],{"class":1097,"line":1185},[1095,8755,1109],{"class":1108},[1095,8757,8758],{"class":1112}," UserAnalytics",[1095,8760,5557],{"class":1116},[1095,8762,8763,8765,8768],{"class":1097,"line":1206},[1095,8764,2344],{"class":2343},[1095,8766,8767],{"class":2347},"Advanced analytics using MongoDB aggregation",[1095,8769,2351],{"class":2343},[1095,8771,8772],{"class":1097,"line":1213},[1095,8773,3035],{"class":1136},[1095,8775,8776,8778],{"class":1097,"line":1219},[1095,8777,6917],{"class":1116},[1095,8779,8780],{"class":1836},"staticmethod\n",[1095,8782,8783,8785,8788],{"class":1097,"line":1225},[1095,8784,3672],{"class":1108},[1095,8786,8787],{"class":3675}," user_engagement_report",[1095,8789,5979],{"class":1116},[1095,8791,8792,8794,8797],{"class":1097,"line":1257},[1095,8793,3707],{"class":2343},[1095,8795,8796],{"class":2347},"Generate user engagement report",[1095,8798,2351],{"class":2343},[1095,8800,8801,8803,8805],{"class":1097,"line":1280},[1095,8802,7848],{"class":1136},[1095,8804,1140],{"class":1116},[1095,8806,1445],{"class":1116},[1095,8808,8809],{"class":1097,"line":1301},[1095,8810,8811],{"class":1101},"            # Match users from last 30 days\n",[1095,8813,8814,8816,8818,8820,8822,8824],{"class":1097,"line":1316},[1095,8815,1451],{"class":1116},[1095,8817,1728],{"class":1228},[1095,8819,7456],{"class":1232},[1095,8821,1728],{"class":1228},[1095,8823,1239],{"class":1116},[1095,8825,1313],{"class":1116},[1095,8827,8828,8830,8832,8834,8836,8838,8840,8843,8845,8847,8849,8851,8853,8855,8857,8860,8862,8865,8867,8870],{"class":1097,"line":1338},[1095,8829,3534],{"class":1228},[1095,8831,1549],{"class":1232},[1095,8833,1728],{"class":1228},[1095,8835,1239],{"class":1116},[1095,8837,3607],{"class":1116},[1095,8839,1728],{"class":1228},[1095,8841,8842],{"class":1232},"$gte",[1095,8844,1728],{"class":1228},[1095,8846,1239],{"class":1116},[1095,8848,3728],{"class":1136},[1095,8850,1124],{"class":1116},[1095,8852,3364],{"class":1148},[1095,8854,1200],{"class":1116},[1095,8856,7603],{"class":1986},[1095,8858,8859],{"class":1148}," timedelta",[1095,8861,1117],{"class":1116},[1095,8863,8864],{"class":1154},"days",[1095,8866,1140],{"class":1116},[1095,8868,8869],{"class":1160},"30",[1095,8871,8872],{"class":1116},")}\n",[1095,8874,8875],{"class":1097,"line":1352},[1095,8876,8091],{"class":1116},[1095,8878,8879],{"class":1097,"line":1374},[1095,8880,7035],{"class":1136},[1095,8882,8883],{"class":1097,"line":1388},[1095,8884,8885],{"class":1101},"            # Lookup user activities\n",[1095,8887,8888,8890,8892,8895,8897,8899],{"class":1097,"line":1406},[1095,8889,1451],{"class":1116},[1095,8891,1728],{"class":1228},[1095,8893,8894],{"class":1232},"$lookup",[1095,8896,1728],{"class":1228},[1095,8898,1239],{"class":1116},[1095,8900,1313],{"class":1116},[1095,8902,8903,8905,8907,8909,8911,8913,8915,8917],{"class":1097,"line":1421},[1095,8904,3534],{"class":1228},[1095,8906,1679],{"class":1232},[1095,8908,1728],{"class":1228},[1095,8910,1239],{"class":1116},[1095,8912,2038],{"class":1228},[1095,8914,4798],{"class":1232},[1095,8916,1728],{"class":1228},[1095,8918,1277],{"class":1116},[1095,8920,8921,8923,8926,8928,8930,8932,8934,8936],{"class":1097,"line":1427},[1095,8922,3534],{"class":1228},[1095,8924,8925],{"class":1232},"localField",[1095,8927,1728],{"class":1228},[1095,8929,1239],{"class":1116},[1095,8931,2038],{"class":1228},[1095,8933,1233],{"class":1232},[1095,8935,1728],{"class":1228},[1095,8937,1277],{"class":1116},[1095,8939,8940,8942,8945,8947,8949,8951,8953,8955],{"class":1097,"line":1433},[1095,8941,3534],{"class":1228},[1095,8943,8944],{"class":1232},"foreignField",[1095,8946,1728],{"class":1228},[1095,8948,1239],{"class":1116},[1095,8950,2038],{"class":1228},[1095,8952,4496],{"class":1232},[1095,8954,1728],{"class":1228},[1095,8956,1277],{"class":1116},[1095,8958,8959,8961,8963,8965,8967,8969,8972],{"class":1097,"line":1448},[1095,8960,3534],{"class":1228},[1095,8962,4943],{"class":1232},[1095,8964,1728],{"class":1228},[1095,8966,1239],{"class":1116},[1095,8968,2038],{"class":1228},[1095,8970,8971],{"class":1232},"activities",[1095,8973,5720],{"class":1228},[1095,8975,8976],{"class":1097,"line":1492},[1095,8977,8091],{"class":1116},[1095,8979,8980],{"class":1097,"line":1532},[1095,8981,7035],{"class":1136},[1095,8983,8984],{"class":1097,"line":1538},[1095,8985,8986],{"class":1101},"            # Add computed fields\n",[1095,8988,8989,8991,8993,8996,8998,9000],{"class":1097,"line":1544},[1095,8990,1451],{"class":1116},[1095,8992,1728],{"class":1228},[1095,8994,8995],{"class":1232},"$addFields",[1095,8997,1728],{"class":1228},[1095,8999,1239],{"class":1116},[1095,9001,1313],{"class":1116},[1095,9003,9004,9006,9009,9011,9013,9015,9017,9020,9022,9024,9026,9029,9031],{"class":1097,"line":1570},[1095,9005,3534],{"class":1228},[1095,9007,9008],{"class":1232},"activity_count",[1095,9010,1728],{"class":1228},[1095,9012,1239],{"class":1116},[1095,9014,3607],{"class":1116},[1095,9016,1728],{"class":1228},[1095,9018,9019],{"class":1232},"$size",[1095,9021,1728],{"class":1228},[1095,9023,1239],{"class":1116},[1095,9025,2038],{"class":1228},[1095,9027,9028],{"class":1232},"$activities",[1095,9030,1728],{"class":1228},[1095,9032,1489],{"class":1116},[1095,9034,9035,9037,9039,9041,9043,9045,9047,9049,9051,9053,9055,9058,9060],{"class":1097,"line":1595},[1095,9036,3534],{"class":1228},[1095,9038,7548],{"class":1232},[1095,9040,1728],{"class":1228},[1095,9042,1239],{"class":1116},[1095,9044,3607],{"class":1116},[1095,9046,1728],{"class":1228},[1095,9048,7559],{"class":1232},[1095,9050,1728],{"class":1228},[1095,9052,1239],{"class":1116},[1095,9054,2038],{"class":1228},[1095,9056,9057],{"class":1232},"$activities.timestamp",[1095,9059,1728],{"class":1228},[1095,9061,1489],{"class":1116},[1095,9063,9064,9066,9069,9071,9073,9075,9077,9079,9081,9083,9085,9087,9090,9092,9094,9096,9099,9101],{"class":1097,"line":2163},[1095,9065,3534],{"class":1228},[1095,9067,9068],{"class":1232},"unique_actions",[1095,9070,1728],{"class":1228},[1095,9072,1239],{"class":1116},[1095,9074,3607],{"class":1116},[1095,9076,1728],{"class":1228},[1095,9078,9019],{"class":1232},[1095,9080,1728],{"class":1228},[1095,9082,1239],{"class":1116},[1095,9084,3607],{"class":1116},[1095,9086,1728],{"class":1228},[1095,9088,9089],{"class":1232},"$setUnion",[1095,9091,1728],{"class":1228},[1095,9093,1239],{"class":1116},[1095,9095,2038],{"class":1228},[1095,9097,9098],{"class":1232},"$activities.action",[1095,9100,1728],{"class":1228},[1095,9102,7609],{"class":1116},[1095,9104,9105],{"class":1097,"line":2194},[1095,9106,8091],{"class":1116},[1095,9108,9109],{"class":1097,"line":2230},[1095,9110,7035],{"class":1136},[1095,9112,9113],{"class":1097,"line":2251},[1095,9114,9115],{"class":1101},"            # Group by engagement level\n",[1095,9117,9118,9120,9122,9124,9126,9128],{"class":1097,"line":2257},[1095,9119,1451],{"class":1116},[1095,9121,1728],{"class":1228},[1095,9123,7488],{"class":1232},[1095,9125,1728],{"class":1228},[1095,9127,1239],{"class":1116},[1095,9129,1313],{"class":1116},[1095,9131,9132,9134,9136,9138,9140],{"class":1097,"line":2263},[1095,9133,3534],{"class":1228},[1095,9135,1233],{"class":1232},[1095,9137,1728],{"class":1228},[1095,9139,1239],{"class":1116},[1095,9141,1313],{"class":1116},[1095,9143,9144,9146,9149,9151,9153],{"class":1097,"line":2887},[1095,9145,7499],{"class":1228},[1095,9147,9148],{"class":1232},"$switch",[1095,9150,1728],{"class":1228},[1095,9152,1239],{"class":1116},[1095,9154,1313],{"class":1116},[1095,9156,9157,9160,9163,9165,9167],{"class":1097,"line":2937},[1095,9158,9159],{"class":1228},"                        '",[1095,9161,9162],{"class":1232},"branches",[1095,9164,1728],{"class":1228},[1095,9166,1239],{"class":1116},[1095,9168,1445],{"class":1116},[1095,9170,9171,9174,9176,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9200,9202,9204,9207,9209,9211,9214,9216,9218,9220,9223,9225],{"class":1097,"line":2977},[1095,9172,9173],{"class":1116},"                            {",[1095,9175,1728],{"class":1228},[1095,9177,9178],{"class":1232},"case",[1095,9180,1728],{"class":1228},[1095,9182,1239],{"class":1116},[1095,9184,3607],{"class":1116},[1095,9186,1728],{"class":1228},[1095,9188,8842],{"class":1232},[1095,9190,1728],{"class":1228},[1095,9192,1239],{"class":1116},[1095,9194,3543],{"class":1116},[1095,9196,1728],{"class":1228},[1095,9198,9199],{"class":1232},"$activity_count",[1095,9201,1728],{"class":1228},[1095,9203,1470],{"class":1116},[1095,9205,9206],{"class":1160}," 50",[1095,9208,8071],{"class":1116},[1095,9210,2038],{"class":1228},[1095,9212,9213],{"class":1232},"then",[1095,9215,1728],{"class":1228},[1095,9217,1239],{"class":1116},[1095,9219,2038],{"class":1228},[1095,9221,9222],{"class":1232},"high",[1095,9224,1728],{"class":1228},[1095,9226,1489],{"class":1116},[1095,9228,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247,9249,9251,9253,9255,9257,9259,9261,9263,9265,9267,9269,9271,9273,9276,9278],{"class":1097,"line":3008},[1095,9230,9173],{"class":1116},[1095,9232,1728],{"class":1228},[1095,9234,9178],{"class":1232},[1095,9236,1728],{"class":1228},[1095,9238,1239],{"class":1116},[1095,9240,3607],{"class":1116},[1095,9242,1728],{"class":1228},[1095,9244,8842],{"class":1232},[1095,9246,1728],{"class":1228},[1095,9248,1239],{"class":1116},[1095,9250,3543],{"class":1116},[1095,9252,1728],{"class":1228},[1095,9254,9199],{"class":1232},[1095,9256,1728],{"class":1228},[1095,9258,1470],{"class":1116},[1095,9260,3618],{"class":1160},[1095,9262,8071],{"class":1116},[1095,9264,2038],{"class":1228},[1095,9266,9213],{"class":1232},[1095,9268,1728],{"class":1228},[1095,9270,1239],{"class":1116},[1095,9272,2038],{"class":1228},[1095,9274,9275],{"class":1232},"medium",[1095,9277,1728],{"class":1228},[1095,9279,1489],{"class":1116},[1095,9281,9282,9284,9286,9288,9290,9292,9294,9296,9299,9301,9303,9305,9307,9309,9311,9313,9315,9317,9319,9321,9323,9325,9327,9330,9332],{"class":1097,"line":3032},[1095,9283,9173],{"class":1116},[1095,9285,1728],{"class":1228},[1095,9287,9178],{"class":1232},[1095,9289,1728],{"class":1228},[1095,9291,1239],{"class":1116},[1095,9293,3607],{"class":1116},[1095,9295,1728],{"class":1228},[1095,9297,9298],{"class":1232},"$gt",[1095,9300,1728],{"class":1228},[1095,9302,1239],{"class":1116},[1095,9304,3543],{"class":1116},[1095,9306,1728],{"class":1228},[1095,9308,9199],{"class":1232},[1095,9310,1728],{"class":1228},[1095,9312,1470],{"class":1116},[1095,9314,8078],{"class":1160},[1095,9316,8071],{"class":1116},[1095,9318,2038],{"class":1228},[1095,9320,9213],{"class":1232},[1095,9322,1728],{"class":1228},[1095,9324,1239],{"class":1116},[1095,9326,2038],{"class":1228},[1095,9328,9329],{"class":1232},"low",[1095,9331,1728],{"class":1228},[1095,9333,1529],{"class":1116},[1095,9335,9336],{"class":1097,"line":3038},[1095,9337,9338],{"class":1116},"                        ],\n",[1095,9340,9341,9343,9345,9347,9349,9351,9354],{"class":1097,"line":3044},[1095,9342,9159],{"class":1228},[1095,9344,2017],{"class":1232},[1095,9346,1728],{"class":1228},[1095,9348,1239],{"class":1116},[1095,9350,2038],{"class":1228},[1095,9352,9353],{"class":1232},"inactive",[1095,9355,5720],{"class":1228},[1095,9357,9358],{"class":1097,"line":3068},[1095,9359,9360],{"class":1116},"                    }\n",[1095,9362,9363],{"class":1097,"line":3092},[1095,9364,7984],{"class":1116},[1095,9366,9367,9369,9371,9373,9375,9377,9379,9381,9383,9385,9387],{"class":1097,"line":3117},[1095,9368,3534],{"class":1228},[1095,9370,7991],{"class":1232},[1095,9372,1728],{"class":1228},[1095,9374,1239],{"class":1116},[1095,9376,3607],{"class":1116},[1095,9378,1728],{"class":1228},[1095,9380,7532],{"class":1232},[1095,9382,1728],{"class":1228},[1095,9384,1239],{"class":1116},[1095,9386,7539],{"class":1160},[1095,9388,1489],{"class":1116},[1095,9390,9391,9393,9396,9398,9400,9402,9404,9407,9409,9411,9413,9415,9417],{"class":1097,"line":3133},[1095,9392,3534],{"class":1228},[1095,9394,9395],{"class":1232},"avg_activities",[1095,9397,1728],{"class":1228},[1095,9399,1239],{"class":1116},[1095,9401,3607],{"class":1116},[1095,9403,1728],{"class":1228},[1095,9405,9406],{"class":1232},"$avg",[1095,9408,1728],{"class":1228},[1095,9410,1239],{"class":1116},[1095,9412,2038],{"class":1228},[1095,9414,9199],{"class":1232},[1095,9416,1728],{"class":1228},[1095,9418,1489],{"class":1116},[1095,9420,9421,9423,9426,9428,9430,9432,9434,9436,9438,9440,9442,9445,9447],{"class":1097,"line":3150},[1095,9422,3534],{"class":1228},[1095,9424,9425],{"class":1232},"avg_unique_actions",[1095,9427,1728],{"class":1228},[1095,9429,1239],{"class":1116},[1095,9431,3607],{"class":1116},[1095,9433,1728],{"class":1228},[1095,9435,9406],{"class":1232},[1095,9437,1728],{"class":1228},[1095,9439,1239],{"class":1116},[1095,9441,2038],{"class":1228},[1095,9443,9444],{"class":1232},"$unique_actions",[1095,9446,1728],{"class":1228},[1095,9448,1529],{"class":1116},[1095,9450,9451],{"class":1097,"line":3155},[1095,9452,8091],{"class":1116},[1095,9454,9455],{"class":1097,"line":3161},[1095,9456,7035],{"class":1136},[1095,9458,9459,9461,9463,9465,9467,9469,9471,9473,9475,9477,9479,9481,9483],{"class":1097,"line":3194},[1095,9460,1451],{"class":1116},[1095,9462,1728],{"class":1228},[1095,9464,7586],{"class":1232},[1095,9466,1728],{"class":1228},[1095,9468,1239],{"class":1116},[1095,9470,3607],{"class":1116},[1095,9472,1728],{"class":1228},[1095,9474,7991],{"class":1232},[1095,9476,1728],{"class":1228},[1095,9478,1239],{"class":1116},[1095,9480,7603],{"class":1986},[1095,9482,7606],{"class":1160},[1095,9484,7609],{"class":1116},[1095,9486,9487],{"class":1097,"line":3223},[1095,9488,1535],{"class":1116},[1095,9490,9491],{"class":1097,"line":3252},[1095,9492,5954],{"class":1136},[1095,9494,9495,9497,9499,9501,9503,9505,9507,9509,9511,9513,9515],{"class":1097,"line":3257},[1095,9496,3740],{"class":1670},[1095,9498,7628],{"class":1836},[1095,9500,1117],{"class":1116},[1095,9502,4317],{"class":1148},[1095,9504,1124],{"class":1116},[1095,9506,6420],{"class":3363},[1095,9508,1124],{"class":1116},[1095,9510,7642],{"class":1148},[1095,9512,1117],{"class":1116},[1095,9514,7647],{"class":1148},[1095,9516,3191],{"class":1116},[1095,9518,9519],{"class":1097,"line":3263},[1095,9520,3035],{"class":1136},[1095,9522,9523,9525],{"class":1097,"line":3287},[1095,9524,6917],{"class":1116},[1095,9526,8780],{"class":1836},[1095,9528,9529,9531,9534],{"class":1097,"line":3311},[1095,9530,3672],{"class":1108},[1095,9532,9533],{"class":3675}," geographic_distribution",[1095,9535,5979],{"class":1116},[1095,9537,9538,9540,9543],{"class":1097,"line":3327},[1095,9539,3707],{"class":2343},[1095,9541,9542],{"class":2347},"Analyze user geographic distribution",[1095,9544,2351],{"class":2343},[1095,9546,9547,9549,9551],{"class":1097,"line":3332},[1095,9548,7848],{"class":1136},[1095,9550,1140],{"class":1116},[1095,9552,1445],{"class":1116},[1095,9554,9555],{"class":1097,"line":3338},[1095,9556,9557],{"class":1101},"            # Unwind addresses array\n",[1095,9559,9560,9562,9564,9567,9569,9571,9573,9576,9578],{"class":1097,"line":3369},[1095,9561,1451],{"class":1116},[1095,9563,1728],{"class":1228},[1095,9565,9566],{"class":1232},"$unwind",[1095,9568,1728],{"class":1228},[1095,9570,1239],{"class":1116},[1095,9572,2038],{"class":1228},[1095,9574,9575],{"class":1232},"$addresses",[1095,9577,1728],{"class":1228},[1095,9579,1489],{"class":1116},[1095,9581,9582],{"class":1097,"line":3397},[1095,9583,7035],{"class":1136},[1095,9585,9586],{"class":1097,"line":3413},[1095,9587,9588],{"class":1101},"            # Match primary addresses only\n",[1095,9590,9591,9593,9595,9597,9599,9601,9603,9605,9608,9610,9612,9614],{"class":1097,"line":3418},[1095,9592,1451],{"class":1116},[1095,9594,1728],{"class":1228},[1095,9596,7456],{"class":1232},[1095,9598,1728],{"class":1228},[1095,9600,1239],{"class":1116},[1095,9602,3607],{"class":1116},[1095,9604,1728],{"class":1228},[1095,9606,9607],{"class":1232},"addresses.is_primary",[1095,9609,1728],{"class":1228},[1095,9611,1239],{"class":1116},[1095,9613,1401],{"class":1400},[1095,9615,7479],{"class":1116},[1095,9617,9618],{"class":1097,"line":3424},[1095,9619,7035],{"class":1136},[1095,9621,9622],{"class":1097,"line":3434},[1095,9623,9624],{"class":1101},"            # Group by country and state\n",[1095,9626,9627,9629,9631,9633,9635,9637],{"class":1097,"line":3455},[1095,9628,1451],{"class":1116},[1095,9630,1728],{"class":1228},[1095,9632,7488],{"class":1232},[1095,9634,1728],{"class":1228},[1095,9636,1239],{"class":1116},[1095,9638,1313],{"class":1116},[1095,9640,9641,9643,9645,9647,9649],{"class":1097,"line":3469},[1095,9642,3534],{"class":1228},[1095,9644,1233],{"class":1232},[1095,9646,1728],{"class":1228},[1095,9648,1239],{"class":1116},[1095,9650,1313],{"class":1116},[1095,9652,9653,9655,9658,9660,9662,9664,9667,9669],{"class":1097,"line":3480},[1095,9654,7499],{"class":1228},[1095,9656,9657],{"class":1232},"country",[1095,9659,1728],{"class":1228},[1095,9661,1239],{"class":1116},[1095,9663,2038],{"class":1228},[1095,9665,9666],{"class":1232},"$addresses.country",[1095,9668,1728],{"class":1228},[1095,9670,1277],{"class":1116},[1095,9672,9673,9675,9678,9680,9682,9684,9687],{"class":1097,"line":3491},[1095,9674,7499],{"class":1228},[1095,9676,9677],{"class":1232},"state",[1095,9679,1728],{"class":1228},[1095,9681,1239],{"class":1116},[1095,9683,2038],{"class":1228},[1095,9685,9686],{"class":1232},"$addresses.state",[1095,9688,5720],{"class":1228},[1095,9690,9691],{"class":1097,"line":3502},[1095,9692,7984],{"class":1116},[1095,9694,9695,9697,9699,9701,9703,9705,9707,9709,9711,9713,9715],{"class":1097,"line":3525},[1095,9696,3534],{"class":1228},[1095,9698,7991],{"class":1232},[1095,9700,1728],{"class":1228},[1095,9702,1239],{"class":1116},[1095,9704,3607],{"class":1116},[1095,9706,1728],{"class":1228},[1095,9708,7532],{"class":1232},[1095,9710,1728],{"class":1228},[1095,9712,1239],{"class":1116},[1095,9714,7539],{"class":1160},[1095,9716,1529],{"class":1116},[1095,9718,9719],{"class":1097,"line":3531},[1095,9720,8091],{"class":1116},[1095,9722,9723],{"class":1097,"line":3574},[1095,9724,7035],{"class":1136},[1095,9726,9727],{"class":1097,"line":3595},[1095,9728,9729],{"class":1101},"            # Group by country\n",[1095,9731,9732,9734,9736,9738,9740,9742],{"class":1097,"line":3649},[1095,9733,1451],{"class":1116},[1095,9735,1728],{"class":1228},[1095,9737,7488],{"class":1232},[1095,9739,1728],{"class":1228},[1095,9741,1239],{"class":1116},[1095,9743,1313],{"class":1116},[1095,9745,9746,9748,9750,9752,9754,9756,9759,9761],{"class":1097,"line":3654},[1095,9747,3534],{"class":1228},[1095,9749,1233],{"class":1232},[1095,9751,1728],{"class":1228},[1095,9753,1239],{"class":1116},[1095,9755,2038],{"class":1228},[1095,9757,9758],{"class":1232},"$_id.country",[1095,9760,1728],{"class":1228},[1095,9762,1277],{"class":1116},[1095,9764,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785,9788,9790],{"class":1097,"line":3659},[1095,9766,3534],{"class":1228},[1095,9768,8241],{"class":1232},[1095,9770,1728],{"class":1228},[1095,9772,1239],{"class":1116},[1095,9774,3607],{"class":1116},[1095,9776,1728],{"class":1228},[1095,9778,7532],{"class":1232},[1095,9780,1728],{"class":1228},[1095,9782,1239],{"class":1116},[1095,9784,2038],{"class":1228},[1095,9786,9787],{"class":1232},"$user_count",[1095,9789,1728],{"class":1228},[1095,9791,1489],{"class":1116},[1095,9793,9794,9796,9799,9801,9803],{"class":1097,"line":3664},[1095,9795,3534],{"class":1228},[1095,9797,9798],{"class":1232},"states",[1095,9800,1728],{"class":1228},[1095,9802,1239],{"class":1116},[1095,9804,1313],{"class":1116},[1095,9806,9807,9809,9812,9814,9816],{"class":1097,"line":3669},[1095,9808,7499],{"class":1228},[1095,9810,9811],{"class":1232},"$push",[1095,9813,1728],{"class":1228},[1095,9815,1239],{"class":1116},[1095,9817,1313],{"class":1116},[1095,9819,9820,9822,9824,9826,9828,9830,9833,9835],{"class":1097,"line":3704},[1095,9821,9159],{"class":1228},[1095,9823,9677],{"class":1232},[1095,9825,1728],{"class":1228},[1095,9827,1239],{"class":1116},[1095,9829,2038],{"class":1228},[1095,9831,9832],{"class":1232},"$_id.state",[1095,9834,1728],{"class":1228},[1095,9836,1277],{"class":1116},[1095,9838,9839,9841,9843,9845,9847,9849,9851],{"class":1097,"line":3715},[1095,9840,9159],{"class":1228},[1095,9842,7991],{"class":1232},[1095,9844,1728],{"class":1228},[1095,9846,1239],{"class":1116},[1095,9848,2038],{"class":1228},[1095,9850,9787],{"class":1232},[1095,9852,5720],{"class":1228},[1095,9854,9855],{"class":1097,"line":3737},[1095,9856,9360],{"class":1116},[1095,9858,9859],{"class":1097,"line":3767},[1095,9860,8086],{"class":1116},[1095,9862,9863],{"class":1097,"line":3772},[1095,9864,8091],{"class":1116},[1095,9866,9867],{"class":1097,"line":3786},[1095,9868,7035],{"class":1136},[1095,9870,9871,9873,9875,9877,9879,9881,9883,9885,9887,9889,9891,9893,9895],{"class":1097,"line":3796},[1095,9872,1451],{"class":1116},[1095,9874,1728],{"class":1228},[1095,9876,7586],{"class":1232},[1095,9878,1728],{"class":1228},[1095,9880,1239],{"class":1116},[1095,9882,3607],{"class":1116},[1095,9884,1728],{"class":1228},[1095,9886,8241],{"class":1232},[1095,9888,1728],{"class":1228},[1095,9890,1239],{"class":1116},[1095,9892,7603],{"class":1986},[1095,9894,7606],{"class":1160},[1095,9896,7609],{"class":1116},[1095,9898,9899],{"class":1097,"line":3803},[1095,9900,1535],{"class":1116},[1095,9902,9903],{"class":1097,"line":3824},[1095,9904,5954],{"class":1136},[1095,9906,9907,9909,9911,9913,9915,9917,9919,9921,9923,9925,9927],{"class":1097,"line":3843},[1095,9908,3740],{"class":1670},[1095,9910,7628],{"class":1836},[1095,9912,1117],{"class":1116},[1095,9914,4317],{"class":1148},[1095,9916,1124],{"class":1116},[1095,9918,6420],{"class":3363},[1095,9920,1124],{"class":1116},[1095,9922,7642],{"class":1148},[1095,9924,1117],{"class":1116},[1095,9926,7647],{"class":1148},[1095,9928,3191],{"class":1116},[1095,9930,9931],{"class":1097,"line":3862},[1095,9932,3035],{"class":1136},[1095,9934,9935,9937],{"class":1097,"line":3882},[1095,9936,6917],{"class":1116},[1095,9938,8780],{"class":1836},[1095,9940,9941,9943,9946],{"class":1097,"line":3902},[1095,9942,3672],{"class":1108},[1095,9944,9945],{"class":3675}," user_preferences_analysis",[1095,9947,5979],{"class":1116},[1095,9949,9950,9952,9955],{"class":1097,"line":3921},[1095,9951,3707],{"class":2343},[1095,9953,9954],{"class":2347},"Analyze user preferences",[1095,9956,2351],{"class":2343},[1095,9958,9959,9961,9963],{"class":1097,"line":3941},[1095,9960,7848],{"class":1136},[1095,9962,1140],{"class":1116},[1095,9964,1445],{"class":1116},[1095,9966,9967],{"class":1097,"line":3987},[1095,9968,9969],{"class":1101},"            # Match users with preferences\n",[1095,9971,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990,9992,9994,9996,9999,10001,10003,10005],{"class":1097,"line":4028},[1095,9973,1451],{"class":1116},[1095,9975,1728],{"class":1228},[1095,9977,7456],{"class":1232},[1095,9979,1728],{"class":1228},[1095,9981,1239],{"class":1116},[1095,9983,3607],{"class":1116},[1095,9985,1728],{"class":1228},[1095,9987,1343],{"class":1232},[1095,9989,1728],{"class":1228},[1095,9991,1239],{"class":1116},[1095,9993,3607],{"class":1116},[1095,9995,1728],{"class":1228},[1095,9997,9998],{"class":1232},"$exists",[1095,10000,1728],{"class":1228},[1095,10002,1239],{"class":1116},[1095,10004,1401],{"class":1400},[1095,10006,10007],{"class":1116},"}}},\n",[1095,10009,10010],{"class":1097,"line":4070},[1095,10011,7035],{"class":1136},[1095,10013,10014],{"class":1097,"line":4089},[1095,10015,10016],{"class":1101},"            # Group by theme preference\n",[1095,10018,10019,10021,10023,10025,10027,10029],{"class":1097,"line":4109},[1095,10020,1451],{"class":1116},[1095,10022,1728],{"class":1228},[1095,10024,7488],{"class":1232},[1095,10026,1728],{"class":1228},[1095,10028,1239],{"class":1116},[1095,10030,1313],{"class":1116},[1095,10032,10033,10035,10037,10039,10041,10043,10046,10048],{"class":1097,"line":4148},[1095,10034,3534],{"class":1228},[1095,10036,1233],{"class":1232},[1095,10038,1728],{"class":1228},[1095,10040,1239],{"class":1116},[1095,10042,2038],{"class":1228},[1095,10044,10045],{"class":1232},"$preferences.theme",[1095,10047,1728],{"class":1228},[1095,10049,1277],{"class":1116},[1095,10051,10052,10054,10056,10058,10060,10062,10064,10066,10068,10070,10072],{"class":1097,"line":4185},[1095,10053,3534],{"class":1228},[1095,10055,7521],{"class":1232},[1095,10057,1728],{"class":1228},[1095,10059,1239],{"class":1116},[1095,10061,3607],{"class":1116},[1095,10063,1728],{"class":1228},[1095,10065,7532],{"class":1232},[1095,10067,1728],{"class":1228},[1095,10069,1239],{"class":1116},[1095,10071,7539],{"class":1160},[1095,10073,1489],{"class":1116},[1095,10075,10076,10078,10081,10083,10085,10087,10089,10092,10094,10096,10098,10101,10103],{"class":1097,"line":4222},[1095,10077,3534],{"class":1228},[1095,10079,10080],{"class":1232},"languages",[1095,10082,1728],{"class":1228},[1095,10084,1239],{"class":1116},[1095,10086,3607],{"class":1116},[1095,10088,1728],{"class":1228},[1095,10090,10091],{"class":1232},"$addToSet",[1095,10093,1728],{"class":1228},[1095,10095,1239],{"class":1116},[1095,10097,2038],{"class":1228},[1095,10099,10100],{"class":1232},"$preferences.language",[1095,10102,1728],{"class":1228},[1095,10104,1489],{"class":1116},[1095,10106,10107,10109,10112,10114,10116],{"class":1097,"line":4227},[1095,10108,3534],{"class":1228},[1095,10110,10111],{"class":1232},"avg_notifications",[1095,10113,1728],{"class":1228},[1095,10115,1239],{"class":1116},[1095,10117,1313],{"class":1116},[1095,10119,10120,10122,10124,10126,10128],{"class":1097,"line":4232},[1095,10121,7499],{"class":1228},[1095,10123,9406],{"class":1232},[1095,10125,1728],{"class":1228},[1095,10127,1239],{"class":1116},[1095,10129,1313],{"class":1116},[1095,10131,10132,10134,10137,10139,10141],{"class":1097,"line":4246},[1095,10133,9159],{"class":1228},[1095,10135,10136],{"class":1232},"$add",[1095,10138,1728],{"class":1228},[1095,10140,1239],{"class":1116},[1095,10142,1445],{"class":1116},[1095,10144,10145,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169,10172,10174,10176,10178,10180,10182,10184,10186],{"class":1097,"line":4256},[1095,10146,9173],{"class":1116},[1095,10148,1728],{"class":1228},[1095,10150,8039],{"class":1232},[1095,10152,1728],{"class":1228},[1095,10154,1239],{"class":1116},[1095,10156,8046],{"class":1116},[1095,10158,1728],{"class":1228},[1095,10160,8051],{"class":1232},[1095,10162,1728],{"class":1228},[1095,10164,1239],{"class":1116},[1095,10166,3543],{"class":1116},[1095,10168,1728],{"class":1228},[1095,10170,10171],{"class":1232},"$preferences.notifications.email",[1095,10173,1728],{"class":1228},[1095,10175,1470],{"class":1116},[1095,10177,1401],{"class":1400},[1095,10179,8071],{"class":1116},[1095,10181,7539],{"class":1160},[1095,10183,1470],{"class":1116},[1095,10185,8078],{"class":1160},[1095,10187,10188],{"class":1116},"]},\n",[1095,10190,10191,10193,10195,10197,10199,10201,10203,10205,10207,10209,10211,10213,10215,10218,10220,10222,10224,10226,10228,10230,10232],{"class":1097,"line":4300},[1095,10192,9173],{"class":1116},[1095,10194,1728],{"class":1228},[1095,10196,8039],{"class":1232},[1095,10198,1728],{"class":1228},[1095,10200,1239],{"class":1116},[1095,10202,8046],{"class":1116},[1095,10204,1728],{"class":1228},[1095,10206,8051],{"class":1232},[1095,10208,1728],{"class":1228},[1095,10210,1239],{"class":1116},[1095,10212,3543],{"class":1116},[1095,10214,1728],{"class":1228},[1095,10216,10217],{"class":1232},"$preferences.notifications.push",[1095,10219,1728],{"class":1228},[1095,10221,1470],{"class":1116},[1095,10223,1401],{"class":1400},[1095,10225,8071],{"class":1116},[1095,10227,7539],{"class":1160},[1095,10229,1470],{"class":1116},[1095,10231,8078],{"class":1160},[1095,10233,10188],{"class":1116},[1095,10235,10236,10238,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10263,10265,10267,10269,10271,10273,10275,10277],{"class":1097,"line":4330},[1095,10237,9173],{"class":1116},[1095,10239,1728],{"class":1228},[1095,10241,8039],{"class":1232},[1095,10243,1728],{"class":1228},[1095,10245,1239],{"class":1116},[1095,10247,8046],{"class":1116},[1095,10249,1728],{"class":1228},[1095,10251,8051],{"class":1232},[1095,10253,1728],{"class":1228},[1095,10255,1239],{"class":1116},[1095,10257,3543],{"class":1116},[1095,10259,1728],{"class":1228},[1095,10261,10262],{"class":1232},"$preferences.notifications.sms",[1095,10264,1728],{"class":1228},[1095,10266,1470],{"class":1116},[1095,10268,1401],{"class":1400},[1095,10270,8071],{"class":1116},[1095,10272,7539],{"class":1160},[1095,10274,1470],{"class":1116},[1095,10276,8078],{"class":1160},[1095,10278,8081],{"class":1116},[1095,10280,10281],{"class":1097,"line":4346},[1095,10282,10283],{"class":1116},"                        ]\n",[1095,10285,10286],{"class":1097,"line":4362},[1095,10287,9360],{"class":1116},[1095,10289,10290],{"class":1097,"line":4378},[1095,10291,8086],{"class":1116},[1095,10293,10294],{"class":1097,"line":4405},[1095,10295,8091],{"class":1116},[1095,10297,10298],{"class":1097,"line":4421},[1095,10299,7035],{"class":1136},[1095,10301,10302,10304,10306,10308,10310,10312,10314,10316,10318,10320,10322,10324,10326],{"class":1097,"line":4444},[1095,10303,1451],{"class":1116},[1095,10305,1728],{"class":1228},[1095,10307,7586],{"class":1232},[1095,10309,1728],{"class":1228},[1095,10311,1239],{"class":1116},[1095,10313,3607],{"class":1116},[1095,10315,1728],{"class":1228},[1095,10317,7521],{"class":1232},[1095,10319,1728],{"class":1228},[1095,10321,1239],{"class":1116},[1095,10323,7603],{"class":1986},[1095,10325,7606],{"class":1160},[1095,10327,7609],{"class":1116},[1095,10329,10330],{"class":1097,"line":4449},[1095,10331,1535],{"class":1116},[1095,10333,10334],{"class":1097,"line":4458},[1095,10335,5954],{"class":1136},[1095,10337,10338,10340,10342,10344,10346,10348,10350,10352,10354,10356,10358],{"class":1097,"line":4478},[1095,10339,3740],{"class":1670},[1095,10341,7628],{"class":1836},[1095,10343,1117],{"class":1116},[1095,10345,4317],{"class":1148},[1095,10347,1124],{"class":1116},[1095,10349,6420],{"class":3363},[1095,10351,1124],{"class":1116},[1095,10353,7642],{"class":1148},[1095,10355,1117],{"class":1116},[1095,10357,7647],{"class":1148},[1095,10359,3191],{"class":1116},[1035,10361,10363],{"id":10362},"_2-change-streams-for-real-time-updates","2. Change Streams for Real-time Updates",[1085,10365,10367],{"className":1087,"code":10366,"language":1089,"meta":1090,"style":1090},"# change_streams.py\nimport threading\nfrom mongoengine import connect\nfrom pymongo import MongoClient\nfrom .models import User\nfrom .messaging import publish_user_event\n\nclass UserChangeStreamHandler:\n    \"\"\"Handle MongoDB change streams for real-time updates\"\"\"\n    \n    def __init__(self):\n        self.client = MongoClient('mongodb://localhost:27017/')\n        self.db = self.client.user_service_db\n        self.collection = self.db.users\n        self.running = False\n    \n    def start_watching(self):\n        \"\"\"Start watching for changes\"\"\"\n        self.running = True\n        thread = threading.Thread(target=self._watch_changes)\n        thread.daemon = True\n        thread.start()\n    \n    def stop_watching(self):\n        \"\"\"Stop watching for changes\"\"\"\n        self.running = False\n    \n    def _watch_changes(self):\n        \"\"\"Watch for changes in user collection\"\"\"\n        try:\n            with self.collection.watch() as stream:\n                for change in stream:\n                    if not self.running:\n                        break\n                    \n                    self._handle_change(change)\n        except Exception as e:\n            print(f\"Change stream error: {e}\")\n    \n    def _handle_change(self, change):\n        \"\"\"Handle individual change events\"\"\"\n        operation_type = change['operationType']\n        \n        if operation_type == 'insert':\n            self._handle_user_created(change)\n        elif operation_type == 'update':\n            self._handle_user_updated(change)\n        elif operation_type == 'delete':\n            self._handle_user_deleted(change)\n    \n    def _handle_user_created(self, change):\n        \"\"\"Handle user creation\"\"\"\n        user_data = change['fullDocument']\n        \n        # Publish event to message queue\n        publish_user_event('user.created', {\n            'user_id': user_data['_id'],\n            'username': user_data['username'],\n            'email': user_data['email'],\n            'timestamp': user_data['created_at']\n        })\n        \n        print(f\"User created: {user_data['username']}\")\n    \n    def _handle_user_updated(self, change):\n        \"\"\"Handle user updates\"\"\"\n        user_id = change['documentKey']['_id']\n        updated_fields = change.get('updateDescription', {}).get('updatedFields', {})\n        \n        # Publish event for significant updates\n        if any(field in updated_fields for field in ['email', 'is_verified', 'is_active']):\n            publish_user_event('user.updated', {\n                'user_id': user_id,\n                'updated_fields': list(updated_fields.keys()),\n                'timestamp': datetime.utcnow().isoformat()\n            })\n        \n        print(f\"User updated: {user_id}\")\n    \n    def _handle_user_deleted(self, change):\n        \"\"\"Handle user deletion\"\"\"\n        user_id = change['documentKey']['_id']\n        \n        publish_user_event('user.deleted', {\n            'user_id': user_id,\n            'timestamp': datetime.utcnow().isoformat()\n        })\n        \n        print(f\"User deleted: {user_id}\")\n\n# Start change stream handler\nchange_handler = UserChangeStreamHandler()\nchange_handler.start_watching()\n",[1092,10368,10369,10374,10381,10392,10404,10416,10430,10434,10443,10452,10456,10469,10494,10515,10536,10549,10553,10566,10575,10588,10619,10633,10644,10648,10661,10670,10682,10686,10699,10708,10714,10739,10752,10767,10772,10777,10794,10806,10832,10836,10854,10863,10884,10888,10907,10923,10941,10956,10973,10988,10992,11009,11018,11038,11042,11047,11065,11088,11110,11132,11154,11158,11162,11196,11200,11217,11226,11255,11298,11302,11307,11359,11377,11392,11417,11439,11443,11447,11468,11472,11489,11498,11524,11528,11545,11559,11581,11585,11589,11610,11614,11619,11630],{"__ignoreMap":1090},[1095,10370,10371],{"class":1097,"line":1098},[1095,10372,10373],{"class":1101},"# change_streams.py\n",[1095,10375,10376,10378],{"class":1097,"line":1105},[1095,10377,1671],{"class":1670},[1095,10379,10380],{"class":1136}," threading\n",[1095,10382,10383,10385,10387,10389],{"class":1097,"line":1133},[1095,10384,1679],{"class":1670},[1095,10386,2286],{"class":1136},[1095,10388,1671],{"class":1670},[1095,10390,10391],{"class":1136}," connect\n",[1095,10393,10394,10396,10399,10401],{"class":1097,"line":1167},[1095,10395,1679],{"class":1670},[1095,10397,10398],{"class":1136}," pymongo ",[1095,10400,1671],{"class":1670},[1095,10402,10403],{"class":1136}," MongoClient\n",[1095,10405,10406,10408,10410,10412,10414],{"class":1097,"line":1185},[1095,10407,1679],{"class":1670},[1095,10409,4953],{"class":1116},[1095,10411,4956],{"class":1136},[1095,10413,1671],{"class":1670},[1095,10415,5567],{"class":1136},[1095,10417,10418,10420,10422,10425,10427],{"class":1097,"line":1206},[1095,10419,1679],{"class":1670},[1095,10421,4953],{"class":1116},[1095,10423,10424],{"class":1136},"messaging ",[1095,10426,1671],{"class":1670},[1095,10428,10429],{"class":1136}," publish_user_event\n",[1095,10431,10432],{"class":1097,"line":1213},[1095,10433,1210],{"emptyLinePlaceholder":1209},[1095,10435,10436,10438,10441],{"class":1097,"line":1219},[1095,10437,1109],{"class":1108},[1095,10439,10440],{"class":1112}," UserChangeStreamHandler",[1095,10442,5557],{"class":1116},[1095,10444,10445,10447,10450],{"class":1097,"line":1225},[1095,10446,2344],{"class":2343},[1095,10448,10449],{"class":2347},"Handle MongoDB change streams for real-time updates",[1095,10451,2351],{"class":2343},[1095,10453,10454],{"class":1097,"line":1257},[1095,10455,3035],{"class":1136},[1095,10457,10458,10460,10463,10465,10467],{"class":1097,"line":1280},[1095,10459,3672],{"class":1108},[1095,10461,10462],{"class":5984}," __init__",[1095,10464,1117],{"class":1116},[1095,10466,3682],{"class":3681},[1095,10468,1130],{"class":1116},[1095,10470,10471,10473,10475,10478,10480,10483,10485,10487,10490,10492],{"class":1097,"line":1301},[1095,10472,3718],{"class":1711},[1095,10474,1124],{"class":1116},[1095,10476,10477],{"class":3363},"client",[1095,10479,1715],{"class":1116},[1095,10481,10482],{"class":1148}," MongoClient",[1095,10484,1117],{"class":1116},[1095,10486,1728],{"class":1228},[1095,10488,10489],{"class":1232},"mongodb://localhost:27017/",[1095,10491,1728],{"class":1228},[1095,10493,1164],{"class":1116},[1095,10495,10496,10498,10500,10502,10504,10506,10508,10510,10512],{"class":1097,"line":1316},[1095,10497,3718],{"class":1711},[1095,10499,1124],{"class":1116},[1095,10501,1725],{"class":3363},[1095,10503,1715],{"class":1116},[1095,10505,3815],{"class":1711},[1095,10507,1124],{"class":1116},[1095,10509,10477],{"class":3363},[1095,10511,1124],{"class":1116},[1095,10513,10514],{"class":3363},"user_service_db\n",[1095,10516,10517,10519,10521,10523,10525,10527,10529,10531,10533],{"class":1097,"line":1338},[1095,10518,3718],{"class":1711},[1095,10520,1124],{"class":1116},[1095,10522,3439],{"class":3363},[1095,10524,1715],{"class":1116},[1095,10526,3815],{"class":1711},[1095,10528,1124],{"class":1116},[1095,10530,1725],{"class":3363},[1095,10532,1124],{"class":1116},[1095,10534,10535],{"class":3363},"users\n",[1095,10537,10538,10540,10542,10545,10547],{"class":1097,"line":1352},[1095,10539,3718],{"class":1711},[1095,10541,1124],{"class":1116},[1095,10543,10544],{"class":3363},"running",[1095,10546,1715],{"class":1116},[1095,10548,1418],{"class":1400},[1095,10550,10551],{"class":1097,"line":1374},[1095,10552,3035],{"class":1136},[1095,10554,10555,10557,10560,10562,10564],{"class":1097,"line":1388},[1095,10556,3672],{"class":1108},[1095,10558,10559],{"class":3675}," start_watching",[1095,10561,1117],{"class":1116},[1095,10563,3682],{"class":3681},[1095,10565,1130],{"class":1116},[1095,10567,10568,10570,10573],{"class":1097,"line":1406},[1095,10569,3707],{"class":2343},[1095,10571,10572],{"class":2347},"Start watching for changes",[1095,10574,2351],{"class":2343},[1095,10576,10577,10579,10581,10583,10585],{"class":1097,"line":1421},[1095,10578,3718],{"class":1711},[1095,10580,1124],{"class":1116},[1095,10582,10544],{"class":3363},[1095,10584,1715],{"class":1116},[1095,10586,10587],{"class":1400}," True\n",[1095,10589,10590,10593,10595,10598,10600,10603,10605,10608,10610,10612,10614,10617],{"class":1097,"line":1427},[1095,10591,10592],{"class":1136},"        thread ",[1095,10594,1140],{"class":1116},[1095,10596,10597],{"class":1136}," threading",[1095,10599,1124],{"class":1116},[1095,10601,10602],{"class":1148},"Thread",[1095,10604,1117],{"class":1116},[1095,10606,10607],{"class":1154},"target",[1095,10609,1140],{"class":1116},[1095,10611,3682],{"class":1711},[1095,10613,1124],{"class":1116},[1095,10615,10616],{"class":3363},"_watch_changes",[1095,10618,1164],{"class":1116},[1095,10620,10621,10624,10626,10629,10631],{"class":1097,"line":1433},[1095,10622,10623],{"class":1136},"        thread",[1095,10625,1124],{"class":1116},[1095,10627,10628],{"class":3363},"daemon",[1095,10630,1715],{"class":1116},[1095,10632,10587],{"class":1400},[1095,10634,10635,10637,10639,10642],{"class":1097,"line":1448},[1095,10636,10623],{"class":1136},[1095,10638,1124],{"class":1116},[1095,10640,10641],{"class":1148},"start",[1095,10643,1182],{"class":1116},[1095,10645,10646],{"class":1097,"line":1492},[1095,10647,3035],{"class":1136},[1095,10649,10650,10652,10655,10657,10659],{"class":1097,"line":1532},[1095,10651,3672],{"class":1108},[1095,10653,10654],{"class":3675}," stop_watching",[1095,10656,1117],{"class":1116},[1095,10658,3682],{"class":3681},[1095,10660,1130],{"class":1116},[1095,10662,10663,10665,10668],{"class":1097,"line":1538},[1095,10664,3707],{"class":2343},[1095,10666,10667],{"class":2347},"Stop watching for changes",[1095,10669,2351],{"class":2343},[1095,10671,10672,10674,10676,10678,10680],{"class":1097,"line":1544},[1095,10673,3718],{"class":1711},[1095,10675,1124],{"class":1116},[1095,10677,10544],{"class":3363},[1095,10679,1715],{"class":1116},[1095,10681,1418],{"class":1400},[1095,10683,10684],{"class":1097,"line":1570},[1095,10685,3035],{"class":1136},[1095,10687,10688,10690,10693,10695,10697],{"class":1097,"line":1595},[1095,10689,3672],{"class":1108},[1095,10691,10692],{"class":3675}," _watch_changes",[1095,10694,1117],{"class":1116},[1095,10696,3682],{"class":3681},[1095,10698,1130],{"class":1116},[1095,10700,10701,10703,10706],{"class":1097,"line":2163},[1095,10702,3707],{"class":2343},[1095,10704,10705],{"class":2347},"Watch for changes in user collection",[1095,10707,2351],{"class":2343},[1095,10709,10710,10712],{"class":1097,"line":2194},[1095,10711,6986],{"class":1670},[1095,10713,5557],{"class":1116},[1095,10715,10716,10719,10721,10723,10725,10727,10730,10732,10734,10737],{"class":1097,"line":2230},[1095,10717,10718],{"class":1670},"            with",[1095,10720,3815],{"class":1711},[1095,10722,1124],{"class":1116},[1095,10724,3439],{"class":3363},[1095,10726,1124],{"class":1116},[1095,10728,10729],{"class":1148},"watch",[1095,10731,1200],{"class":1116},[1095,10733,7286],{"class":1670},[1095,10735,10736],{"class":1136}," stream",[1095,10738,5557],{"class":1116},[1095,10740,10741,10743,10746,10748,10750],{"class":1097,"line":2251},[1095,10742,7125],{"class":1670},[1095,10744,10745],{"class":1136}," change ",[1095,10747,3976],{"class":1670},[1095,10749,10736],{"class":1136},[1095,10751,5557],{"class":1116},[1095,10753,10754,10757,10759,10761,10763,10765],{"class":1097,"line":2257},[1095,10755,10756],{"class":1670},"                    if",[1095,10758,6581],{"class":1986},[1095,10760,3815],{"class":1711},[1095,10762,1124],{"class":1116},[1095,10764,10544],{"class":3363},[1095,10766,5557],{"class":1116},[1095,10768,10769],{"class":1097,"line":2263},[1095,10770,10771],{"class":1670},"                        break\n",[1095,10773,10774],{"class":1097,"line":2887},[1095,10775,10776],{"class":1136},"                    \n",[1095,10778,10779,10782,10784,10787,10789,10792],{"class":1097,"line":2937},[1095,10780,10781],{"class":1711},"                    self",[1095,10783,1124],{"class":1116},[1095,10785,10786],{"class":1148},"_handle_change",[1095,10788,1117],{"class":1116},[1095,10790,10791],{"class":1148},"change",[1095,10793,1164],{"class":1116},[1095,10795,10796,10798,10800,10802,10804],{"class":1097,"line":2977},[1095,10797,7228],{"class":1670},[1095,10799,7283],{"class":1836},[1095,10801,7286],{"class":1670},[1095,10803,7289],{"class":1136},[1095,10805,5557],{"class":1116},[1095,10807,10808,10811,10813,10816,10819,10823,10825,10828,10830],{"class":1097,"line":3008},[1095,10809,10810],{"class":5984},"            print",[1095,10812,1117],{"class":1116},[1095,10814,10815],{"class":1108},"f",[1095,10817,10818],{"class":1232},"\"Change stream error: ",[1095,10820,10822],{"class":10821},"s3h35","{",[1095,10824,7314],{"class":1148},[1095,10826,10827],{"class":10821},"}",[1095,10829,1236],{"class":1232},[1095,10831,1164],{"class":1116},[1095,10833,10834],{"class":1097,"line":3032},[1095,10835,3035],{"class":1136},[1095,10837,10838,10840,10843,10845,10847,10849,10852],{"class":1097,"line":3038},[1095,10839,3672],{"class":1108},[1095,10841,10842],{"class":3675}," _handle_change",[1095,10844,1117],{"class":1116},[1095,10846,3682],{"class":3681},[1095,10848,1470],{"class":1116},[1095,10850,10851],{"class":3690}," change",[1095,10853,1130],{"class":1116},[1095,10855,10856,10858,10861],{"class":1097,"line":3044},[1095,10857,3707],{"class":2343},[1095,10859,10860],{"class":2347},"Handle individual change events",[1095,10862,2351],{"class":2343},[1095,10864,10865,10868,10870,10872,10875,10877,10880,10882],{"class":1097,"line":3068},[1095,10866,10867],{"class":1136},"        operation_type ",[1095,10869,1140],{"class":1116},[1095,10871,10851],{"class":1136},[1095,10873,10874],{"class":1116},"[",[1095,10876,1728],{"class":1228},[1095,10878,10879],{"class":1232},"operationType",[1095,10881,1728],{"class":1228},[1095,10883,5758],{"class":1116},[1095,10885,10886],{"class":1097,"line":3092},[1095,10887,5954],{"class":1136},[1095,10889,10890,10892,10895,10898,10900,10903,10905],{"class":1097,"line":3117},[1095,10891,5921],{"class":1670},[1095,10893,10894],{"class":1136}," operation_type ",[1095,10896,10897],{"class":1986},"==",[1095,10899,2038],{"class":1228},[1095,10901,10902],{"class":1232},"insert",[1095,10904,1728],{"class":1228},[1095,10906,5557],{"class":1116},[1095,10908,10909,10912,10914,10917,10919,10921],{"class":1097,"line":3133},[1095,10910,10911],{"class":1711},"            self",[1095,10913,1124],{"class":1116},[1095,10915,10916],{"class":1148},"_handle_user_created",[1095,10918,1117],{"class":1116},[1095,10920,10791],{"class":1148},[1095,10922,1164],{"class":1116},[1095,10924,10925,10928,10930,10932,10934,10937,10939],{"class":1097,"line":3150},[1095,10926,10927],{"class":1670},"        elif",[1095,10929,10894],{"class":1136},[1095,10931,10897],{"class":1986},[1095,10933,2038],{"class":1228},[1095,10935,10936],{"class":1232},"update",[1095,10938,1728],{"class":1228},[1095,10940,5557],{"class":1116},[1095,10942,10943,10945,10947,10950,10952,10954],{"class":1097,"line":3155},[1095,10944,10911],{"class":1711},[1095,10946,1124],{"class":1116},[1095,10948,10949],{"class":1148},"_handle_user_updated",[1095,10951,1117],{"class":1116},[1095,10953,10791],{"class":1148},[1095,10955,1164],{"class":1116},[1095,10957,10958,10960,10962,10964,10966,10969,10971],{"class":1097,"line":3161},[1095,10959,10927],{"class":1670},[1095,10961,10894],{"class":1136},[1095,10963,10897],{"class":1986},[1095,10965,2038],{"class":1228},[1095,10967,10968],{"class":1232},"delete",[1095,10970,1728],{"class":1228},[1095,10972,5557],{"class":1116},[1095,10974,10975,10977,10979,10982,10984,10986],{"class":1097,"line":3194},[1095,10976,10911],{"class":1711},[1095,10978,1124],{"class":1116},[1095,10980,10981],{"class":1148},"_handle_user_deleted",[1095,10983,1117],{"class":1116},[1095,10985,10791],{"class":1148},[1095,10987,1164],{"class":1116},[1095,10989,10990],{"class":1097,"line":3223},[1095,10991,3035],{"class":1136},[1095,10993,10994,10996,10999,11001,11003,11005,11007],{"class":1097,"line":3252},[1095,10995,3672],{"class":1108},[1095,10997,10998],{"class":3675}," _handle_user_created",[1095,11000,1117],{"class":1116},[1095,11002,3682],{"class":3681},[1095,11004,1470],{"class":1116},[1095,11006,10851],{"class":3690},[1095,11008,1130],{"class":1116},[1095,11010,11011,11013,11016],{"class":1097,"line":3257},[1095,11012,3707],{"class":2343},[1095,11014,11015],{"class":2347},"Handle user creation",[1095,11017,2351],{"class":2343},[1095,11019,11020,11023,11025,11027,11029,11031,11034,11036],{"class":1097,"line":3263},[1095,11021,11022],{"class":1136},"        user_data ",[1095,11024,1140],{"class":1116},[1095,11026,10851],{"class":1136},[1095,11028,10874],{"class":1116},[1095,11030,1728],{"class":1228},[1095,11032,11033],{"class":1232},"fullDocument",[1095,11035,1728],{"class":1228},[1095,11037,5758],{"class":1116},[1095,11039,11040],{"class":1097,"line":3287},[1095,11041,5954],{"class":1136},[1095,11043,11044],{"class":1097,"line":3311},[1095,11045,11046],{"class":1101},"        # Publish event to message queue\n",[1095,11048,11049,11052,11054,11056,11059,11061,11063],{"class":1097,"line":3327},[1095,11050,11051],{"class":1148},"        publish_user_event",[1095,11053,1117],{"class":1116},[1095,11055,1728],{"class":1228},[1095,11057,11058],{"class":1232},"user.created",[1095,11060,1728],{"class":1228},[1095,11062,1470],{"class":1116},[1095,11064,1313],{"class":1116},[1095,11066,11067,11069,11071,11073,11075,11078,11080,11082,11084,11086],{"class":1097,"line":3332},[1095,11068,2098],{"class":1228},[1095,11070,3808],{"class":1232},[1095,11072,1728],{"class":1228},[1095,11074,1239],{"class":1116},[1095,11076,11077],{"class":1148}," user_data",[1095,11079,10874],{"class":1116},[1095,11081,1728],{"class":1228},[1095,11083,1233],{"class":1232},[1095,11085,1728],{"class":1228},[1095,11087,3571],{"class":1116},[1095,11089,11090,11092,11094,11096,11098,11100,11102,11104,11106,11108],{"class":1097,"line":3338},[1095,11091,2098],{"class":1228},[1095,11093,1262],{"class":1232},[1095,11095,1728],{"class":1228},[1095,11097,1239],{"class":1116},[1095,11099,11077],{"class":1148},[1095,11101,10874],{"class":1116},[1095,11103,1728],{"class":1228},[1095,11105,1262],{"class":1232},[1095,11107,1728],{"class":1228},[1095,11109,3571],{"class":1116},[1095,11111,11112,11114,11116,11118,11120,11122,11124,11126,11128,11130],{"class":1097,"line":3369},[1095,11113,2098],{"class":1228},[1095,11115,1285],{"class":1232},[1095,11117,1728],{"class":1228},[1095,11119,1239],{"class":1116},[1095,11121,11077],{"class":1148},[1095,11123,10874],{"class":1116},[1095,11125,1728],{"class":1228},[1095,11127,1285],{"class":1232},[1095,11129,1728],{"class":1228},[1095,11131,3571],{"class":1116},[1095,11133,11134,11136,11138,11140,11142,11144,11146,11148,11150,11152],{"class":1097,"line":3397},[1095,11135,2098],{"class":1228},[1095,11137,4834],{"class":1232},[1095,11139,1728],{"class":1228},[1095,11141,1239],{"class":1116},[1095,11143,11077],{"class":1148},[1095,11145,10874],{"class":1116},[1095,11147,1728],{"class":1228},[1095,11149,1549],{"class":1232},[1095,11151,1728],{"class":1228},[1095,11153,5758],{"class":1116},[1095,11155,11156],{"class":1097,"line":3413},[1095,11157,8333],{"class":1116},[1095,11159,11160],{"class":1097,"line":3418},[1095,11161,5954],{"class":1136},[1095,11163,11164,11167,11169,11171,11174,11176,11179,11181,11183,11185,11187,11190,11192,11194],{"class":1097,"line":3424},[1095,11165,11166],{"class":5984},"        print",[1095,11168,1117],{"class":1116},[1095,11170,10815],{"class":1108},[1095,11172,11173],{"class":1232},"\"User created: ",[1095,11175,10822],{"class":10821},[1095,11177,11178],{"class":1148},"user_data",[1095,11180,10874],{"class":1116},[1095,11182,1728],{"class":1228},[1095,11184,1262],{"class":1232},[1095,11186,1728],{"class":1228},[1095,11188,11189],{"class":1116},"]",[1095,11191,10827],{"class":10821},[1095,11193,1236],{"class":1232},[1095,11195,1164],{"class":1116},[1095,11197,11198],{"class":1097,"line":3434},[1095,11199,3035],{"class":1136},[1095,11201,11202,11204,11207,11209,11211,11213,11215],{"class":1097,"line":3455},[1095,11203,3672],{"class":1108},[1095,11205,11206],{"class":3675}," _handle_user_updated",[1095,11208,1117],{"class":1116},[1095,11210,3682],{"class":3681},[1095,11212,1470],{"class":1116},[1095,11214,10851],{"class":3690},[1095,11216,1130],{"class":1116},[1095,11218,11219,11221,11224],{"class":1097,"line":3469},[1095,11220,3707],{"class":2343},[1095,11222,11223],{"class":2347},"Handle user updates",[1095,11225,2351],{"class":2343},[1095,11227,11228,11231,11233,11235,11237,11239,11242,11244,11247,11249,11251,11253],{"class":1097,"line":3480},[1095,11229,11230],{"class":1136},"        user_id ",[1095,11232,1140],{"class":1116},[1095,11234,10851],{"class":1136},[1095,11236,10874],{"class":1116},[1095,11238,1728],{"class":1228},[1095,11240,11241],{"class":1232},"documentKey",[1095,11243,1728],{"class":1228},[1095,11245,11246],{"class":1116},"][",[1095,11248,1728],{"class":1228},[1095,11250,1233],{"class":1232},[1095,11252,1728],{"class":1228},[1095,11254,5758],{"class":1116},[1095,11256,11257,11260,11262,11264,11266,11268,11270,11272,11275,11277,11279,11282,11284,11286,11288,11291,11293,11295],{"class":1097,"line":3491},[1095,11258,11259],{"class":1136},"        updated_fields ",[1095,11261,1140],{"class":1116},[1095,11263,10851],{"class":1136},[1095,11265,1124],{"class":1116},[1095,11267,6558],{"class":1148},[1095,11269,1117],{"class":1116},[1095,11271,1728],{"class":1228},[1095,11273,11274],{"class":1232},"updateDescription",[1095,11276,1728],{"class":1228},[1095,11278,1470],{"class":1116},[1095,11280,11281],{"class":1116}," {}).",[1095,11283,6558],{"class":1148},[1095,11285,1117],{"class":1116},[1095,11287,1728],{"class":1228},[1095,11289,11290],{"class":1232},"updatedFields",[1095,11292,1728],{"class":1228},[1095,11294,1470],{"class":1116},[1095,11296,11297],{"class":1116}," {})\n",[1095,11299,11300],{"class":1097,"line":3502},[1095,11301,5954],{"class":1136},[1095,11303,11304],{"class":1097,"line":3525},[1095,11305,11306],{"class":1101},"        # Publish event for significant updates\n",[1095,11308,11309,11311,11314,11316,11319,11321,11324,11327,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356],{"class":1097,"line":3531},[1095,11310,5921],{"class":1670},[1095,11312,11313],{"class":5984}," any",[1095,11315,1117],{"class":1116},[1095,11317,11318],{"class":1148},"field ",[1095,11320,3976],{"class":1670},[1095,11322,11323],{"class":1148}," updated_fields ",[1095,11325,11326],{"class":1670},"for",[1095,11328,11329],{"class":1148}," field ",[1095,11331,3976],{"class":1670},[1095,11333,3543],{"class":1116},[1095,11335,1728],{"class":1228},[1095,11337,1285],{"class":1232},[1095,11339,1728],{"class":1228},[1095,11341,1470],{"class":1116},[1095,11343,2038],{"class":1228},[1095,11345,4094],{"class":1232},[1095,11347,1728],{"class":1228},[1095,11349,1470],{"class":1116},[1095,11351,2038],{"class":1228},[1095,11353,3518],{"class":1232},[1095,11355,1728],{"class":1228},[1095,11357,11358],{"class":1116},"]):\n",[1095,11360,11361,11364,11366,11368,11371,11373,11375],{"class":1097,"line":3574},[1095,11362,11363],{"class":1148},"            publish_user_event",[1095,11365,1117],{"class":1116},[1095,11367,1728],{"class":1228},[1095,11369,11370],{"class":1232},"user.updated",[1095,11372,1728],{"class":1228},[1095,11374,1470],{"class":1116},[1095,11376,1313],{"class":1116},[1095,11378,11379,11381,11383,11385,11387,11390],{"class":1097,"line":3595},[1095,11380,3534],{"class":1228},[1095,11382,3808],{"class":1232},[1095,11384,1728],{"class":1228},[1095,11386,1239],{"class":1116},[1095,11388,11389],{"class":1148}," user_id",[1095,11391,1277],{"class":1116},[1095,11393,11394,11396,11399,11401,11403,11405,11407,11409,11411,11414],{"class":1097,"line":3649},[1095,11395,3534],{"class":1228},[1095,11397,11398],{"class":1232},"updated_fields",[1095,11400,1728],{"class":1228},[1095,11402,1239],{"class":1116},[1095,11404,7628],{"class":1836},[1095,11406,1117],{"class":1116},[1095,11408,11398],{"class":1148},[1095,11410,1124],{"class":1116},[1095,11412,11413],{"class":1148},"keys",[1095,11415,11416],{"class":1116},"()),\n",[1095,11418,11419,11421,11423,11425,11427,11429,11431,11433,11435,11437],{"class":1097,"line":3654},[1095,11420,3534],{"class":1228},[1095,11422,4834],{"class":1232},[1095,11424,1728],{"class":1228},[1095,11426,1239],{"class":1116},[1095,11428,3728],{"class":1148},[1095,11430,1124],{"class":1116},[1095,11432,3364],{"class":1148},[1095,11434,3746],{"class":1116},[1095,11436,4128],{"class":1148},[1095,11438,1182],{"class":1116},[1095,11440,11441],{"class":1097,"line":3659},[1095,11442,7737],{"class":1116},[1095,11444,11445],{"class":1097,"line":3664},[1095,11446,5954],{"class":1136},[1095,11448,11449,11451,11453,11455,11458,11460,11462,11464,11466],{"class":1097,"line":3669},[1095,11450,11166],{"class":5984},[1095,11452,1117],{"class":1116},[1095,11454,10815],{"class":1108},[1095,11456,11457],{"class":1232},"\"User updated: ",[1095,11459,10822],{"class":10821},[1095,11461,3808],{"class":1148},[1095,11463,10827],{"class":10821},[1095,11465,1236],{"class":1232},[1095,11467,1164],{"class":1116},[1095,11469,11470],{"class":1097,"line":3704},[1095,11471,3035],{"class":1136},[1095,11473,11474,11476,11479,11481,11483,11485,11487],{"class":1097,"line":3715},[1095,11475,3672],{"class":1108},[1095,11477,11478],{"class":3675}," _handle_user_deleted",[1095,11480,1117],{"class":1116},[1095,11482,3682],{"class":3681},[1095,11484,1470],{"class":1116},[1095,11486,10851],{"class":3690},[1095,11488,1130],{"class":1116},[1095,11490,11491,11493,11496],{"class":1097,"line":3737},[1095,11492,3707],{"class":2343},[1095,11494,11495],{"class":2347},"Handle user deletion",[1095,11497,2351],{"class":2343},[1095,11499,11500,11502,11504,11506,11508,11510,11512,11514,11516,11518,11520,11522],{"class":1097,"line":3767},[1095,11501,11230],{"class":1136},[1095,11503,1140],{"class":1116},[1095,11505,10851],{"class":1136},[1095,11507,10874],{"class":1116},[1095,11509,1728],{"class":1228},[1095,11511,11241],{"class":1232},[1095,11513,1728],{"class":1228},[1095,11515,11246],{"class":1116},[1095,11517,1728],{"class":1228},[1095,11519,1233],{"class":1232},[1095,11521,1728],{"class":1228},[1095,11523,5758],{"class":1116},[1095,11525,11526],{"class":1097,"line":3772},[1095,11527,5954],{"class":1136},[1095,11529,11530,11532,11534,11536,11539,11541,11543],{"class":1097,"line":3786},[1095,11531,11051],{"class":1148},[1095,11533,1117],{"class":1116},[1095,11535,1728],{"class":1228},[1095,11537,11538],{"class":1232},"user.deleted",[1095,11540,1728],{"class":1228},[1095,11542,1470],{"class":1116},[1095,11544,1313],{"class":1116},[1095,11546,11547,11549,11551,11553,11555,11557],{"class":1097,"line":3796},[1095,11548,2098],{"class":1228},[1095,11550,3808],{"class":1232},[1095,11552,1728],{"class":1228},[1095,11554,1239],{"class":1116},[1095,11556,11389],{"class":1148},[1095,11558,1277],{"class":1116},[1095,11560,11561,11563,11565,11567,11569,11571,11573,11575,11577,11579],{"class":1097,"line":3803},[1095,11562,2098],{"class":1228},[1095,11564,4834],{"class":1232},[1095,11566,1728],{"class":1228},[1095,11568,1239],{"class":1116},[1095,11570,3728],{"class":1148},[1095,11572,1124],{"class":1116},[1095,11574,3364],{"class":1148},[1095,11576,3746],{"class":1116},[1095,11578,4128],{"class":1148},[1095,11580,1182],{"class":1116},[1095,11582,11583],{"class":1097,"line":3824},[1095,11584,8333],{"class":1116},[1095,11586,11587],{"class":1097,"line":3843},[1095,11588,5954],{"class":1136},[1095,11590,11591,11593,11595,11597,11600,11602,11604,11606,11608],{"class":1097,"line":3862},[1095,11592,11166],{"class":5984},[1095,11594,1117],{"class":1116},[1095,11596,10815],{"class":1108},[1095,11598,11599],{"class":1232},"\"User deleted: ",[1095,11601,10822],{"class":10821},[1095,11603,3808],{"class":1148},[1095,11605,10827],{"class":10821},[1095,11607,1236],{"class":1232},[1095,11609,1164],{"class":1116},[1095,11611,11612],{"class":1097,"line":3882},[1095,11613,1210],{"emptyLinePlaceholder":1209},[1095,11615,11616],{"class":1097,"line":3902},[1095,11617,11618],{"class":1101},"# Start change stream handler\n",[1095,11620,11621,11624,11626,11628],{"class":1097,"line":3921},[1095,11622,11623],{"class":1136},"change_handler ",[1095,11625,1140],{"class":1116},[1095,11627,10440],{"class":1148},[1095,11629,1182],{"class":1116},[1095,11631,11632,11635,11637,11640],{"class":1097,"line":3941},[1095,11633,11634],{"class":1136},"change_handler",[1095,11636,1124],{"class":1116},[1095,11638,11639],{"class":1148},"start_watching",[1095,11641,1182],{"class":1116},[1035,11643,11645],{"id":11644},"_3-mongodb-sharding-configuration","3. MongoDB Sharding Configuration",[1085,11647,11649],{"className":1087,"code":11648,"language":1089,"meta":1090,"style":1090},"# sharding.py\nfrom pymongo import MongoClient\n\nclass MongoDBShardingSetup:\n    \"\"\"Setup MongoDB sharding for horizontal scaling\"\"\"\n    \n    def __init__(self, config_servers, shard_servers, mongos_servers):\n        self.config_servers = config_servers\n        self.shard_servers = shard_servers\n        self.mongos_servers = mongos_servers\n    \n    def setup_sharding(self):\n        \"\"\"Setup sharding configuration\"\"\"\n        # Connect to mongos\n        client = MongoClient(self.mongos_servers[0])\n        admin_db = client.admin\n        \n        # Add shards\n        for shard in self.shard_servers:\n            try:\n                admin_db.command('addShard', shard)\n                print(f\"Added shard: {shard}\")\n            except Exception as e:\n                print(f\"Error adding shard {shard}: {e}\")\n        \n        # Enable sharding for database\n        admin_db.command('enableSharding', 'user_service_db')\n        \n        # Shard collections\n        self._shard_users_collection(admin_db)\n        self._shard_activities_collection(admin_db)\n    \n    def _shard_users_collection(self, admin_db):\n        \"\"\"Shard users collection by user_id\"\"\"\n        admin_db.command({\n            'shardCollection': 'user_service_db.users',\n            'key': {'user_id': 1}\n        })\n        print(\"Sharded users collection\")\n    \n    def _shard_activities_collection(self, admin_db):\n        \"\"\"Shard activities collection by user and timestamp\"\"\"\n        admin_db.command({\n            'shardCollection': 'user_service_db.user_activities',\n            'key': {'user': 1, 'timestamp': 1}\n        })\n        print(\"Sharded user_activities collection\")\n\n# Usage\nsharding_setup = MongoDBShardingSetup(\n    config_servers=['config1:27019', 'config2:27019', 'config3:27019'],\n    shard_servers=['shard1/shard1a:27018,shard1b:27018', 'shard2/shard2a:27018,shard2b:27018'],\n    mongos_servers=['mongos1:27017', 'mongos2:27017']\n)\n",[1092,11650,11651,11656,11666,11670,11679,11688,11692,11719,11733,11747,11761,11765,11778,11787,11792,11816,11831,11835,11840,11857,11863,11889,11912,11924,11954,11958,11963,11991,11995,12000,12016,12031,12035,12053,12062,12072,12092,12117,12121,12136,12140,12157,12166,12176,12195,12231,12235,12250,12254,12259,12270,12304,12329,12354],{"__ignoreMap":1090},[1095,11652,11653],{"class":1097,"line":1098},[1095,11654,11655],{"class":1101},"# sharding.py\n",[1095,11657,11658,11660,11662,11664],{"class":1097,"line":1105},[1095,11659,1679],{"class":1670},[1095,11661,10398],{"class":1136},[1095,11663,1671],{"class":1670},[1095,11665,10403],{"class":1136},[1095,11667,11668],{"class":1097,"line":1133},[1095,11669,1210],{"emptyLinePlaceholder":1209},[1095,11671,11672,11674,11677],{"class":1097,"line":1167},[1095,11673,1109],{"class":1108},[1095,11675,11676],{"class":1112}," MongoDBShardingSetup",[1095,11678,5557],{"class":1116},[1095,11680,11681,11683,11686],{"class":1097,"line":1185},[1095,11682,2344],{"class":2343},[1095,11684,11685],{"class":2347},"Setup MongoDB sharding for horizontal scaling",[1095,11687,2351],{"class":2343},[1095,11689,11690],{"class":1097,"line":1206},[1095,11691,3035],{"class":1136},[1095,11693,11694,11696,11698,11700,11702,11704,11707,11709,11712,11714,11717],{"class":1097,"line":1213},[1095,11695,3672],{"class":1108},[1095,11697,10462],{"class":5984},[1095,11699,1117],{"class":1116},[1095,11701,3682],{"class":3681},[1095,11703,1470],{"class":1116},[1095,11705,11706],{"class":3690}," config_servers",[1095,11708,1470],{"class":1116},[1095,11710,11711],{"class":3690}," shard_servers",[1095,11713,1470],{"class":1116},[1095,11715,11716],{"class":3690}," mongos_servers",[1095,11718,1130],{"class":1116},[1095,11720,11721,11723,11725,11728,11730],{"class":1097,"line":1219},[1095,11722,3718],{"class":1711},[1095,11724,1124],{"class":1116},[1095,11726,11727],{"class":3363},"config_servers",[1095,11729,1715],{"class":1116},[1095,11731,11732],{"class":1136}," config_servers\n",[1095,11734,11735,11737,11739,11742,11744],{"class":1097,"line":1225},[1095,11736,3718],{"class":1711},[1095,11738,1124],{"class":1116},[1095,11740,11741],{"class":3363},"shard_servers",[1095,11743,1715],{"class":1116},[1095,11745,11746],{"class":1136}," shard_servers\n",[1095,11748,11749,11751,11753,11756,11758],{"class":1097,"line":1257},[1095,11750,3718],{"class":1711},[1095,11752,1124],{"class":1116},[1095,11754,11755],{"class":3363},"mongos_servers",[1095,11757,1715],{"class":1116},[1095,11759,11760],{"class":1136}," mongos_servers\n",[1095,11762,11763],{"class":1097,"line":1280},[1095,11764,3035],{"class":1136},[1095,11766,11767,11769,11772,11774,11776],{"class":1097,"line":1301},[1095,11768,3672],{"class":1108},[1095,11770,11771],{"class":3675}," setup_sharding",[1095,11773,1117],{"class":1116},[1095,11775,3682],{"class":3681},[1095,11777,1130],{"class":1116},[1095,11779,11780,11782,11785],{"class":1097,"line":1316},[1095,11781,3707],{"class":2343},[1095,11783,11784],{"class":2347},"Setup sharding configuration",[1095,11786,2351],{"class":2343},[1095,11788,11789],{"class":1097,"line":1338},[1095,11790,11791],{"class":1101},"        # Connect to mongos\n",[1095,11793,11794,11797,11799,11801,11803,11805,11807,11809,11811,11814],{"class":1097,"line":1352},[1095,11795,11796],{"class":1136},"        client ",[1095,11798,1140],{"class":1116},[1095,11800,10482],{"class":1148},[1095,11802,1117],{"class":1116},[1095,11804,3682],{"class":1711},[1095,11806,1124],{"class":1116},[1095,11808,11755],{"class":3363},[1095,11810,10874],{"class":1116},[1095,11812,11813],{"class":1160},"0",[1095,11815,2713],{"class":1116},[1095,11817,11818,11821,11823,11826,11828],{"class":1097,"line":1374},[1095,11819,11820],{"class":1136},"        admin_db ",[1095,11822,1140],{"class":1116},[1095,11824,11825],{"class":1136}," client",[1095,11827,1124],{"class":1116},[1095,11829,11830],{"class":3363},"admin\n",[1095,11832,11833],{"class":1097,"line":1388},[1095,11834,5954],{"class":1136},[1095,11836,11837],{"class":1097,"line":1406},[1095,11838,11839],{"class":1101},"        # Add shards\n",[1095,11841,11842,11844,11847,11849,11851,11853,11855],{"class":1097,"line":1421},[1095,11843,5959],{"class":1670},[1095,11845,11846],{"class":1136}," shard ",[1095,11848,3976],{"class":1670},[1095,11850,3815],{"class":1711},[1095,11852,1124],{"class":1116},[1095,11854,11741],{"class":3363},[1095,11856,5557],{"class":1116},[1095,11858,11859,11861],{"class":1097,"line":1427},[1095,11860,6820],{"class":1670},[1095,11862,5557],{"class":1116},[1095,11864,11865,11868,11870,11873,11875,11877,11880,11882,11884,11887],{"class":1097,"line":1433},[1095,11866,11867],{"class":1136},"                admin_db",[1095,11869,1124],{"class":1116},[1095,11871,11872],{"class":1148},"command",[1095,11874,1117],{"class":1116},[1095,11876,1728],{"class":1228},[1095,11878,11879],{"class":1232},"addShard",[1095,11881,1728],{"class":1228},[1095,11883,1470],{"class":1116},[1095,11885,11886],{"class":1148}," shard",[1095,11888,1164],{"class":1116},[1095,11890,11891,11894,11896,11898,11901,11903,11906,11908,11910],{"class":1097,"line":1448},[1095,11892,11893],{"class":5984},"                print",[1095,11895,1117],{"class":1116},[1095,11897,10815],{"class":1108},[1095,11899,11900],{"class":1232},"\"Added shard: ",[1095,11902,10822],{"class":10821},[1095,11904,11905],{"class":1148},"shard",[1095,11907,10827],{"class":10821},[1095,11909,1236],{"class":1232},[1095,11911,1164],{"class":1116},[1095,11913,11914,11916,11918,11920,11922],{"class":1097,"line":1492},[1095,11915,6872],{"class":1670},[1095,11917,7283],{"class":1836},[1095,11919,7286],{"class":1670},[1095,11921,7289],{"class":1136},[1095,11923,5557],{"class":1116},[1095,11925,11926,11928,11930,11932,11935,11937,11939,11941,11944,11946,11948,11950,11952],{"class":1097,"line":1532},[1095,11927,11893],{"class":5984},[1095,11929,1117],{"class":1116},[1095,11931,10815],{"class":1108},[1095,11933,11934],{"class":1232},"\"Error adding shard ",[1095,11936,10822],{"class":10821},[1095,11938,11905],{"class":1148},[1095,11940,10827],{"class":10821},[1095,11942,11943],{"class":1232},": ",[1095,11945,10822],{"class":10821},[1095,11947,7314],{"class":1148},[1095,11949,10827],{"class":10821},[1095,11951,1236],{"class":1232},[1095,11953,1164],{"class":1116},[1095,11955,11956],{"class":1097,"line":1538},[1095,11957,5954],{"class":1136},[1095,11959,11960],{"class":1097,"line":1544},[1095,11961,11962],{"class":1101},"        # Enable sharding for database\n",[1095,11964,11965,11968,11970,11972,11974,11976,11979,11981,11983,11985,11987,11989],{"class":1097,"line":1570},[1095,11966,11967],{"class":1136},"        admin_db",[1095,11969,1124],{"class":1116},[1095,11971,11872],{"class":1148},[1095,11973,1117],{"class":1116},[1095,11975,1728],{"class":1228},[1095,11977,11978],{"class":1232},"enableSharding",[1095,11980,1728],{"class":1228},[1095,11982,1470],{"class":1116},[1095,11984,2038],{"class":1228},[1095,11986,1754],{"class":1232},[1095,11988,1728],{"class":1228},[1095,11990,1164],{"class":1116},[1095,11992,11993],{"class":1097,"line":1595},[1095,11994,5954],{"class":1136},[1095,11996,11997],{"class":1097,"line":2163},[1095,11998,11999],{"class":1101},"        # Shard collections\n",[1095,12001,12002,12004,12006,12009,12011,12014],{"class":1097,"line":2194},[1095,12003,3718],{"class":1711},[1095,12005,1124],{"class":1116},[1095,12007,12008],{"class":1148},"_shard_users_collection",[1095,12010,1117],{"class":1116},[1095,12012,12013],{"class":1148},"admin_db",[1095,12015,1164],{"class":1116},[1095,12017,12018,12020,12022,12025,12027,12029],{"class":1097,"line":2230},[1095,12019,3718],{"class":1711},[1095,12021,1124],{"class":1116},[1095,12023,12024],{"class":1148},"_shard_activities_collection",[1095,12026,1117],{"class":1116},[1095,12028,12013],{"class":1148},[1095,12030,1164],{"class":1116},[1095,12032,12033],{"class":1097,"line":2251},[1095,12034,3035],{"class":1136},[1095,12036,12037,12039,12042,12044,12046,12048,12051],{"class":1097,"line":2257},[1095,12038,3672],{"class":1108},[1095,12040,12041],{"class":3675}," _shard_users_collection",[1095,12043,1117],{"class":1116},[1095,12045,3682],{"class":3681},[1095,12047,1470],{"class":1116},[1095,12049,12050],{"class":3690}," admin_db",[1095,12052,1130],{"class":1116},[1095,12054,12055,12057,12060],{"class":1097,"line":2263},[1095,12056,3707],{"class":2343},[1095,12058,12059],{"class":2347},"Shard users collection by user_id",[1095,12061,2351],{"class":2343},[1095,12063,12064,12066,12068,12070],{"class":1097,"line":2887},[1095,12065,11967],{"class":1136},[1095,12067,1124],{"class":1116},[1095,12069,11872],{"class":1148},[1095,12071,7662],{"class":1116},[1095,12073,12074,12076,12079,12081,12083,12085,12088,12090],{"class":1097,"line":2937},[1095,12075,2098],{"class":1228},[1095,12077,12078],{"class":1232},"shardCollection",[1095,12080,1728],{"class":1228},[1095,12082,1239],{"class":1116},[1095,12084,2038],{"class":1228},[1095,12086,12087],{"class":1232},"user_service_db.users",[1095,12089,1728],{"class":1228},[1095,12091,1277],{"class":1116},[1095,12093,12094,12096,12099,12101,12103,12105,12107,12109,12111,12113,12115],{"class":1097,"line":2977},[1095,12095,2098],{"class":1228},[1095,12097,12098],{"class":1232},"key",[1095,12100,1728],{"class":1228},[1095,12102,1239],{"class":1116},[1095,12104,3607],{"class":1116},[1095,12106,1728],{"class":1228},[1095,12108,3808],{"class":1232},[1095,12110,1728],{"class":1228},[1095,12112,1239],{"class":1116},[1095,12114,7539],{"class":1160},[1095,12116,1529],{"class":1116},[1095,12118,12119],{"class":1097,"line":3008},[1095,12120,8333],{"class":1116},[1095,12122,12123,12125,12127,12129,12132,12134],{"class":1097,"line":3032},[1095,12124,11166],{"class":5984},[1095,12126,1117],{"class":1116},[1095,12128,1236],{"class":1228},[1095,12130,12131],{"class":1232},"Sharded users collection",[1095,12133,1236],{"class":1228},[1095,12135,1164],{"class":1116},[1095,12137,12138],{"class":1097,"line":3038},[1095,12139,3035],{"class":1136},[1095,12141,12142,12144,12147,12149,12151,12153,12155],{"class":1097,"line":3044},[1095,12143,3672],{"class":1108},[1095,12145,12146],{"class":3675}," _shard_activities_collection",[1095,12148,1117],{"class":1116},[1095,12150,3682],{"class":3681},[1095,12152,1470],{"class":1116},[1095,12154,12050],{"class":3690},[1095,12156,1130],{"class":1116},[1095,12158,12159,12161,12164],{"class":1097,"line":3068},[1095,12160,3707],{"class":2343},[1095,12162,12163],{"class":2347},"Shard activities collection by user and timestamp",[1095,12165,2351],{"class":2343},[1095,12167,12168,12170,12172,12174],{"class":1097,"line":3092},[1095,12169,11967],{"class":1136},[1095,12171,1124],{"class":1116},[1095,12173,11872],{"class":1148},[1095,12175,7662],{"class":1116},[1095,12177,12178,12180,12182,12184,12186,12188,12191,12193],{"class":1097,"line":3117},[1095,12179,2098],{"class":1228},[1095,12181,12078],{"class":1232},[1095,12183,1728],{"class":1228},[1095,12185,1239],{"class":1116},[1095,12187,2038],{"class":1228},[1095,12189,12190],{"class":1232},"user_service_db.user_activities",[1095,12192,1728],{"class":1228},[1095,12194,1277],{"class":1116},[1095,12196,12197,12199,12201,12203,12205,12207,12209,12211,12213,12215,12217,12219,12221,12223,12225,12227,12229],{"class":1097,"line":3133},[1095,12198,2098],{"class":1228},[1095,12200,12098],{"class":1232},[1095,12202,1728],{"class":1228},[1095,12204,1239],{"class":1116},[1095,12206,3607],{"class":1116},[1095,12208,1728],{"class":1228},[1095,12210,4496],{"class":1232},[1095,12212,1728],{"class":1228},[1095,12214,1239],{"class":1116},[1095,12216,7539],{"class":1160},[1095,12218,1470],{"class":1116},[1095,12220,2038],{"class":1228},[1095,12222,4834],{"class":1232},[1095,12224,1728],{"class":1228},[1095,12226,1239],{"class":1116},[1095,12228,7539],{"class":1160},[1095,12230,1529],{"class":1116},[1095,12232,12233],{"class":1097,"line":3150},[1095,12234,8333],{"class":1116},[1095,12236,12237,12239,12241,12243,12246,12248],{"class":1097,"line":3155},[1095,12238,11166],{"class":5984},[1095,12240,1117],{"class":1116},[1095,12242,1236],{"class":1228},[1095,12244,12245],{"class":1232},"Sharded user_activities collection",[1095,12247,1236],{"class":1228},[1095,12249,1164],{"class":1116},[1095,12251,12252],{"class":1097,"line":3161},[1095,12253,1210],{"emptyLinePlaceholder":1209},[1095,12255,12256],{"class":1097,"line":3194},[1095,12257,12258],{"class":1101},"# Usage\n",[1095,12260,12261,12264,12266,12268],{"class":1097,"line":3223},[1095,12262,12263],{"class":1136},"sharding_setup ",[1095,12265,1140],{"class":1116},[1095,12267,11676],{"class":1148},[1095,12269,6691],{"class":1116},[1095,12271,12272,12275,12277,12279,12282,12284,12286,12288,12291,12293,12295,12297,12300,12302],{"class":1097,"line":3252},[1095,12273,12274],{"class":1154},"    config_servers",[1095,12276,2696],{"class":1116},[1095,12278,1728],{"class":1228},[1095,12280,12281],{"class":1232},"config1:27019",[1095,12283,1728],{"class":1228},[1095,12285,1470],{"class":1116},[1095,12287,2038],{"class":1228},[1095,12289,12290],{"class":1232},"config2:27019",[1095,12292,1728],{"class":1228},[1095,12294,1470],{"class":1116},[1095,12296,2038],{"class":1228},[1095,12298,12299],{"class":1232},"config3:27019",[1095,12301,1728],{"class":1228},[1095,12303,3571],{"class":1116},[1095,12305,12306,12309,12311,12313,12316,12318,12320,12322,12325,12327],{"class":1097,"line":3257},[1095,12307,12308],{"class":1154},"    shard_servers",[1095,12310,2696],{"class":1116},[1095,12312,1728],{"class":1228},[1095,12314,12315],{"class":1232},"shard1/shard1a:27018,shard1b:27018",[1095,12317,1728],{"class":1228},[1095,12319,1470],{"class":1116},[1095,12321,2038],{"class":1228},[1095,12323,12324],{"class":1232},"shard2/shard2a:27018,shard2b:27018",[1095,12326,1728],{"class":1228},[1095,12328,3571],{"class":1116},[1095,12330,12331,12334,12336,12338,12341,12343,12345,12347,12350,12352],{"class":1097,"line":3263},[1095,12332,12333],{"class":1154},"    mongos_servers",[1095,12335,2696],{"class":1116},[1095,12337,1728],{"class":1228},[1095,12339,12340],{"class":1232},"mongos1:27017",[1095,12342,1728],{"class":1228},[1095,12344,1470],{"class":1116},[1095,12346,2038],{"class":1228},[1095,12348,12349],{"class":1232},"mongos2:27017",[1095,12351,1728],{"class":1228},[1095,12353,5758],{"class":1116},[1095,12355,12356],{"class":1097,"line":3287},[1095,12357,1164],{"class":1116},[1035,12359,12361],{"id":12360},"_4-performance-optimization","4. Performance Optimization",[1085,12363,12365],{"className":1087,"code":12364,"language":1089,"meta":1090,"style":1090},"# optimization.py\nfrom mongoengine import connect\nfrom pymongo import IndexModel, TEXT, ASCENDING, DESCENDING\nfrom .models import User, UserActivity\n\nclass MongoDBOptimizer:\n    \"\"\"MongoDB performance optimization utilities\"\"\"\n    \n    @staticmethod\n    def create_indexes():\n        \"\"\"Create optimized indexes\"\"\"\n        # User collection indexes\n        User.ensure_indexes()\n        \n        # Additional compound indexes\n        User._get_collection().create_indexes([\n            IndexModel([('email', ASCENDING), ('is_active', ASCENDING)]),\n            IndexModel([('created_at', DESCENDING), ('is_verified', ASCENDING)]),\n            IndexModel([('username', TEXT), ('email', TEXT), ('bio', TEXT)]),\n        ])\n        \n        # Activity collection indexes\n        UserActivity._get_collection().create_indexes([\n            IndexModel([('user', ASCENDING), ('timestamp', DESCENDING)]),\n            IndexModel([('action', ASCENDING), ('timestamp', DESCENDING)]),\n            IndexModel([('timestamp', DESCENDING)]),\n        ])\n        \n        print(\"Indexes created successfully\")\n    \n    @staticmethod\n    def analyze_query_performance():\n        \"\"\"Analyze query performance\"\"\"\n        # Explain query execution\n        explain_result = User.objects.filter(\n            is_active=True,\n            created_at__gte=datetime.utcnow() - timedelta(days=30)\n        ).explain()\n        \n        print(\"Query execution stats:\")\n        print(f\"Execution time: {explain_result['executionStats']['executionTimeMillis']}ms\")\n        print(f\"Documents examined: {explain_result['executionStats']['totalDocsExamined']}\")\n        print(f\"Documents returned: {explain_result['executionStats']['totalDocsReturned']}\")\n        \n        return explain_result\n    \n    @staticmethod\n    def optimize_aggregation_pipeline(pipeline):\n        \"\"\"Optimize aggregation pipeline\"\"\"\n        # Add index hints and optimize stages\n        optimized_pipeline = []\n        \n        # Move $match stages to the beginning\n        match_stages = [stage for stage in pipeline if '$match' in stage]\n        other_stages = [stage for stage in pipeline if '$match' not in stage]\n        \n        optimized_pipeline.extend(match_stages)\n        optimized_pipeline.extend(other_stages)\n        \n        return optimized_pipeline\n",[1092,12366,12367,12372,12382,12408,12424,12428,12437,12446,12450,12456,12465,12474,12479,12491,12495,12500,12517,12554,12587,12633,12638,12642,12647,12662,12694,12726,12744,12748,12752,12767,12771,12777,12786,12795,12800,12819,12830,12859,12869,12873,12888,12931,12971,13011,13015,13022,13026,13032,13045,13054,13059,13069,13073,13078,13117,13152,13156,13173,13188,13192],{"__ignoreMap":1090},[1095,12368,12369],{"class":1097,"line":1098},[1095,12370,12371],{"class":1101},"# optimization.py\n",[1095,12373,12374,12376,12378,12380],{"class":1097,"line":1105},[1095,12375,1679],{"class":1670},[1095,12377,2286],{"class":1136},[1095,12379,1671],{"class":1670},[1095,12381,10391],{"class":1136},[1095,12383,12384,12386,12388,12390,12393,12395,12398,12400,12403,12405],{"class":1097,"line":1133},[1095,12385,1679],{"class":1670},[1095,12387,10398],{"class":1136},[1095,12389,1671],{"class":1670},[1095,12391,12392],{"class":1136}," IndexModel",[1095,12394,1470],{"class":1116},[1095,12396,12397],{"class":1711}," TEXT",[1095,12399,1470],{"class":1116},[1095,12401,12402],{"class":1711}," ASCENDING",[1095,12404,1470],{"class":1116},[1095,12406,12407],{"class":1711}," DESCENDING\n",[1095,12409,12410,12412,12414,12416,12418,12420,12422],{"class":1097,"line":1167},[1095,12411,1679],{"class":1670},[1095,12413,4953],{"class":1116},[1095,12415,4956],{"class":1136},[1095,12417,1671],{"class":1670},[1095,12419,1113],{"class":1136},[1095,12421,1470],{"class":1116},[1095,12423,6365],{"class":1136},[1095,12425,12426],{"class":1097,"line":1185},[1095,12427,1210],{"emptyLinePlaceholder":1209},[1095,12429,12430,12432,12435],{"class":1097,"line":1206},[1095,12431,1109],{"class":1108},[1095,12433,12434],{"class":1112}," MongoDBOptimizer",[1095,12436,5557],{"class":1116},[1095,12438,12439,12441,12444],{"class":1097,"line":1213},[1095,12440,2344],{"class":2343},[1095,12442,12443],{"class":2347},"MongoDB performance optimization utilities",[1095,12445,2351],{"class":2343},[1095,12447,12448],{"class":1097,"line":1219},[1095,12449,3035],{"class":1136},[1095,12451,12452,12454],{"class":1097,"line":1225},[1095,12453,6917],{"class":1116},[1095,12455,8780],{"class":1836},[1095,12457,12458,12460,12463],{"class":1097,"line":1257},[1095,12459,3672],{"class":1108},[1095,12461,12462],{"class":3675}," create_indexes",[1095,12464,5979],{"class":1116},[1095,12466,12467,12469,12472],{"class":1097,"line":1280},[1095,12468,3707],{"class":2343},[1095,12470,12471],{"class":2347},"Create optimized indexes",[1095,12473,2351],{"class":2343},[1095,12475,12476],{"class":1097,"line":1301},[1095,12477,12478],{"class":1101},"        # User collection indexes\n",[1095,12480,12481,12484,12486,12489],{"class":1097,"line":1316},[1095,12482,12483],{"class":1136},"        User",[1095,12485,1124],{"class":1116},[1095,12487,12488],{"class":1148},"ensure_indexes",[1095,12490,1182],{"class":1116},[1095,12492,12493],{"class":1097,"line":1338},[1095,12494,5954],{"class":1136},[1095,12496,12497],{"class":1097,"line":1352},[1095,12498,12499],{"class":1101},"        # Additional compound indexes\n",[1095,12501,12502,12504,12506,12509,12511,12514],{"class":1097,"line":1374},[1095,12503,12483],{"class":1136},[1095,12505,1124],{"class":1116},[1095,12507,12508],{"class":1148},"_get_collection",[1095,12510,3746],{"class":1116},[1095,12512,12513],{"class":1148},"create_indexes",[1095,12515,12516],{"class":1116},"([\n",[1095,12518,12519,12522,12525,12527,12529,12531,12533,12535,12538,12541,12543,12545,12547,12549,12551],{"class":1097,"line":1388},[1095,12520,12521],{"class":1148},"            IndexModel",[1095,12523,12524],{"class":1116},"([(",[1095,12526,1728],{"class":1228},[1095,12528,1285],{"class":1232},[1095,12530,1728],{"class":1228},[1095,12532,1470],{"class":1116},[1095,12534,12402],{"class":1990},[1095,12536,12537],{"class":1116},"),",[1095,12539,12540],{"class":1116}," (",[1095,12542,1728],{"class":1228},[1095,12544,3518],{"class":1232},[1095,12546,1728],{"class":1228},[1095,12548,1470],{"class":1116},[1095,12550,12402],{"class":1990},[1095,12552,12553],{"class":1116},")]),\n",[1095,12555,12556,12558,12560,12562,12564,12566,12568,12571,12573,12575,12577,12579,12581,12583,12585],{"class":1097,"line":1406},[1095,12557,12521],{"class":1148},[1095,12559,12524],{"class":1116},[1095,12561,1728],{"class":1228},[1095,12563,1549],{"class":1232},[1095,12565,1728],{"class":1228},[1095,12567,1470],{"class":1116},[1095,12569,12570],{"class":1990}," DESCENDING",[1095,12572,12537],{"class":1116},[1095,12574,12540],{"class":1116},[1095,12576,1728],{"class":1228},[1095,12578,4094],{"class":1232},[1095,12580,1728],{"class":1228},[1095,12582,1470],{"class":1116},[1095,12584,12402],{"class":1990},[1095,12586,12553],{"class":1116},[1095,12588,12589,12591,12593,12595,12597,12599,12601,12603,12605,12607,12609,12611,12613,12615,12617,12619,12621,12623,12625,12627,12629,12631],{"class":1097,"line":1421},[1095,12590,12521],{"class":1148},[1095,12592,12524],{"class":1116},[1095,12594,1728],{"class":1228},[1095,12596,1262],{"class":1232},[1095,12598,1728],{"class":1228},[1095,12600,1470],{"class":1116},[1095,12602,12397],{"class":1990},[1095,12604,12537],{"class":1116},[1095,12606,12540],{"class":1116},[1095,12608,1728],{"class":1228},[1095,12610,1285],{"class":1232},[1095,12612,1728],{"class":1228},[1095,12614,1470],{"class":1116},[1095,12616,12397],{"class":1990},[1095,12618,12537],{"class":1116},[1095,12620,12540],{"class":1116},[1095,12622,1728],{"class":1228},[1095,12624,1322],{"class":1232},[1095,12626,1728],{"class":1228},[1095,12628,1470],{"class":1116},[1095,12630,12397],{"class":1990},[1095,12632,12553],{"class":1116},[1095,12634,12635],{"class":1097,"line":1427},[1095,12636,12637],{"class":1116},"        ])\n",[1095,12639,12640],{"class":1097,"line":1433},[1095,12641,5954],{"class":1136},[1095,12643,12644],{"class":1097,"line":1448},[1095,12645,12646],{"class":1101},"        # Activity collection indexes\n",[1095,12648,12649,12652,12654,12656,12658,12660],{"class":1097,"line":1492},[1095,12650,12651],{"class":1136},"        UserActivity",[1095,12653,1124],{"class":1116},[1095,12655,12508],{"class":1148},[1095,12657,3746],{"class":1116},[1095,12659,12513],{"class":1148},[1095,12661,12516],{"class":1116},[1095,12663,12664,12666,12668,12670,12672,12674,12676,12678,12680,12682,12684,12686,12688,12690,12692],{"class":1097,"line":1532},[1095,12665,12521],{"class":1148},[1095,12667,12524],{"class":1116},[1095,12669,1728],{"class":1228},[1095,12671,4496],{"class":1232},[1095,12673,1728],{"class":1228},[1095,12675,1470],{"class":1116},[1095,12677,12402],{"class":1990},[1095,12679,12537],{"class":1116},[1095,12681,12540],{"class":1116},[1095,12683,1728],{"class":1228},[1095,12685,4834],{"class":1232},[1095,12687,1728],{"class":1228},[1095,12689,1470],{"class":1116},[1095,12691,12570],{"class":1990},[1095,12693,12553],{"class":1116},[1095,12695,12696,12698,12700,12702,12704,12706,12708,12710,12712,12714,12716,12718,12720,12722,12724],{"class":1097,"line":1538},[1095,12697,12521],{"class":1148},[1095,12699,12524],{"class":1116},[1095,12701,1728],{"class":1228},[1095,12703,4846],{"class":1232},[1095,12705,1728],{"class":1228},[1095,12707,1470],{"class":1116},[1095,12709,12402],{"class":1990},[1095,12711,12537],{"class":1116},[1095,12713,12540],{"class":1116},[1095,12715,1728],{"class":1228},[1095,12717,4834],{"class":1232},[1095,12719,1728],{"class":1228},[1095,12721,1470],{"class":1116},[1095,12723,12570],{"class":1990},[1095,12725,12553],{"class":1116},[1095,12727,12728,12730,12732,12734,12736,12738,12740,12742],{"class":1097,"line":1544},[1095,12729,12521],{"class":1148},[1095,12731,12524],{"class":1116},[1095,12733,1728],{"class":1228},[1095,12735,4834],{"class":1232},[1095,12737,1728],{"class":1228},[1095,12739,1470],{"class":1116},[1095,12741,12570],{"class":1990},[1095,12743,12553],{"class":1116},[1095,12745,12746],{"class":1097,"line":1570},[1095,12747,12637],{"class":1116},[1095,12749,12750],{"class":1097,"line":1595},[1095,12751,5954],{"class":1136},[1095,12753,12754,12756,12758,12760,12763,12765],{"class":1097,"line":2163},[1095,12755,11166],{"class":5984},[1095,12757,1117],{"class":1116},[1095,12759,1236],{"class":1228},[1095,12761,12762],{"class":1232},"Indexes created successfully",[1095,12764,1236],{"class":1228},[1095,12766,1164],{"class":1116},[1095,12768,12769],{"class":1097,"line":2194},[1095,12770,3035],{"class":1136},[1095,12772,12773,12775],{"class":1097,"line":2230},[1095,12774,6917],{"class":1116},[1095,12776,8780],{"class":1836},[1095,12778,12779,12781,12784],{"class":1097,"line":2251},[1095,12780,3672],{"class":1108},[1095,12782,12783],{"class":3675}," analyze_query_performance",[1095,12785,5979],{"class":1116},[1095,12787,12788,12790,12793],{"class":1097,"line":2257},[1095,12789,3707],{"class":2343},[1095,12791,12792],{"class":2347},"Analyze query performance",[1095,12794,2351],{"class":2343},[1095,12796,12797],{"class":1097,"line":2263},[1095,12798,12799],{"class":1101},"        # Explain query execution\n",[1095,12801,12802,12805,12807,12809,12811,12813,12815,12817],{"class":1097,"line":2887},[1095,12803,12804],{"class":1136},"        explain_result ",[1095,12806,1140],{"class":1116},[1095,12808,1113],{"class":1136},[1095,12810,1124],{"class":1116},[1095,12812,6420],{"class":3363},[1095,12814,1124],{"class":1116},[1095,12816,6600],{"class":1148},[1095,12818,6691],{"class":1116},[1095,12820,12821,12824,12826,12828],{"class":1097,"line":2937},[1095,12822,12823],{"class":1154},"            is_active",[1095,12825,1140],{"class":1116},[1095,12827,2385],{"class":1400},[1095,12829,1277],{"class":1116},[1095,12831,12832,12835,12837,12839,12841,12843,12845,12847,12849,12851,12853,12855,12857],{"class":1097,"line":2977},[1095,12833,12834],{"class":1154},"            created_at__gte",[1095,12836,1140],{"class":1116},[1095,12838,3358],{"class":1148},[1095,12840,1124],{"class":1116},[1095,12842,3364],{"class":1148},[1095,12844,1200],{"class":1116},[1095,12846,7603],{"class":1986},[1095,12848,8859],{"class":1148},[1095,12850,1117],{"class":1116},[1095,12852,8864],{"class":1154},[1095,12854,1140],{"class":1116},[1095,12856,8869],{"class":1160},[1095,12858,1164],{"class":1116},[1095,12860,12861,12864,12867],{"class":1097,"line":3008},[1095,12862,12863],{"class":1116},"        ).",[1095,12865,12866],{"class":1148},"explain",[1095,12868,1182],{"class":1116},[1095,12870,12871],{"class":1097,"line":3032},[1095,12872,5954],{"class":1136},[1095,12874,12875,12877,12879,12881,12884,12886],{"class":1097,"line":3038},[1095,12876,11166],{"class":5984},[1095,12878,1117],{"class":1116},[1095,12880,1236],{"class":1228},[1095,12882,12883],{"class":1232},"Query execution stats:",[1095,12885,1236],{"class":1228},[1095,12887,1164],{"class":1116},[1095,12889,12890,12892,12894,12896,12899,12901,12904,12906,12908,12911,12913,12915,12917,12920,12922,12924,12926,12929],{"class":1097,"line":3044},[1095,12891,11166],{"class":5984},[1095,12893,1117],{"class":1116},[1095,12895,10815],{"class":1108},[1095,12897,12898],{"class":1232},"\"Execution time: ",[1095,12900,10822],{"class":10821},[1095,12902,12903],{"class":1148},"explain_result",[1095,12905,10874],{"class":1116},[1095,12907,1728],{"class":1228},[1095,12909,12910],{"class":1232},"executionStats",[1095,12912,1728],{"class":1228},[1095,12914,11246],{"class":1116},[1095,12916,1728],{"class":1228},[1095,12918,12919],{"class":1232},"executionTimeMillis",[1095,12921,1728],{"class":1228},[1095,12923,11189],{"class":1116},[1095,12925,10827],{"class":10821},[1095,12927,12928],{"class":1232},"ms\"",[1095,12930,1164],{"class":1116},[1095,12932,12933,12935,12937,12939,12942,12944,12946,12948,12950,12952,12954,12956,12958,12961,12963,12965,12967,12969],{"class":1097,"line":3068},[1095,12934,11166],{"class":5984},[1095,12936,1117],{"class":1116},[1095,12938,10815],{"class":1108},[1095,12940,12941],{"class":1232},"\"Documents examined: ",[1095,12943,10822],{"class":10821},[1095,12945,12903],{"class":1148},[1095,12947,10874],{"class":1116},[1095,12949,1728],{"class":1228},[1095,12951,12910],{"class":1232},[1095,12953,1728],{"class":1228},[1095,12955,11246],{"class":1116},[1095,12957,1728],{"class":1228},[1095,12959,12960],{"class":1232},"totalDocsExamined",[1095,12962,1728],{"class":1228},[1095,12964,11189],{"class":1116},[1095,12966,10827],{"class":10821},[1095,12968,1236],{"class":1232},[1095,12970,1164],{"class":1116},[1095,12972,12973,12975,12977,12979,12982,12984,12986,12988,12990,12992,12994,12996,12998,13001,13003,13005,13007,13009],{"class":1097,"line":3092},[1095,12974,11166],{"class":5984},[1095,12976,1117],{"class":1116},[1095,12978,10815],{"class":1108},[1095,12980,12981],{"class":1232},"\"Documents returned: ",[1095,12983,10822],{"class":10821},[1095,12985,12903],{"class":1148},[1095,12987,10874],{"class":1116},[1095,12989,1728],{"class":1228},[1095,12991,12910],{"class":1232},[1095,12993,1728],{"class":1228},[1095,12995,11246],{"class":1116},[1095,12997,1728],{"class":1228},[1095,12999,13000],{"class":1232},"totalDocsReturned",[1095,13002,1728],{"class":1228},[1095,13004,11189],{"class":1116},[1095,13006,10827],{"class":10821},[1095,13008,1236],{"class":1232},[1095,13010,1164],{"class":1116},[1095,13012,13013],{"class":1097,"line":3117},[1095,13014,5954],{"class":1136},[1095,13016,13017,13019],{"class":1097,"line":3133},[1095,13018,3740],{"class":1670},[1095,13020,13021],{"class":1136}," explain_result\n",[1095,13023,13024],{"class":1097,"line":3150},[1095,13025,3035],{"class":1136},[1095,13027,13028,13030],{"class":1097,"line":3155},[1095,13029,6917],{"class":1116},[1095,13031,8780],{"class":1836},[1095,13033,13034,13036,13039,13041,13043],{"class":1097,"line":3161},[1095,13035,3672],{"class":1108},[1095,13037,13038],{"class":3675}," optimize_aggregation_pipeline",[1095,13040,1117],{"class":1116},[1095,13042,7647],{"class":3690},[1095,13044,1130],{"class":1116},[1095,13046,13047,13049,13052],{"class":1097,"line":3194},[1095,13048,3707],{"class":2343},[1095,13050,13051],{"class":2347},"Optimize aggregation pipeline",[1095,13053,2351],{"class":2343},[1095,13055,13056],{"class":1097,"line":3223},[1095,13057,13058],{"class":1101},"        # Add index hints and optimize stages\n",[1095,13060,13061,13064,13066],{"class":1097,"line":3252},[1095,13062,13063],{"class":1136},"        optimized_pipeline ",[1095,13065,1140],{"class":1116},[1095,13067,13068],{"class":1116}," []\n",[1095,13070,13071],{"class":1097,"line":3257},[1095,13072,5954],{"class":1136},[1095,13074,13075],{"class":1097,"line":3263},[1095,13076,13077],{"class":1101},"        # Move $match stages to the beginning\n",[1095,13079,13080,13083,13085,13087,13090,13092,13095,13097,13100,13103,13105,13107,13109,13112,13115],{"class":1097,"line":3287},[1095,13081,13082],{"class":1136},"        match_stages ",[1095,13084,1140],{"class":1116},[1095,13086,3543],{"class":1116},[1095,13088,13089],{"class":1136},"stage ",[1095,13091,11326],{"class":1670},[1095,13093,13094],{"class":1136}," stage ",[1095,13096,3976],{"class":1670},[1095,13098,13099],{"class":1136}," pipeline ",[1095,13101,13102],{"class":1670},"if",[1095,13104,2038],{"class":1228},[1095,13106,7456],{"class":1232},[1095,13108,1728],{"class":1228},[1095,13110,13111],{"class":1986}," in",[1095,13113,13114],{"class":1136}," stage",[1095,13116,5758],{"class":1116},[1095,13118,13119,13122,13124,13126,13128,13130,13132,13134,13136,13138,13140,13142,13144,13146,13148,13150],{"class":1097,"line":3311},[1095,13120,13121],{"class":1136},"        other_stages ",[1095,13123,1140],{"class":1116},[1095,13125,3543],{"class":1116},[1095,13127,13089],{"class":1136},[1095,13129,11326],{"class":1670},[1095,13131,13094],{"class":1136},[1095,13133,3976],{"class":1670},[1095,13135,13099],{"class":1136},[1095,13137,13102],{"class":1670},[1095,13139,2038],{"class":1228},[1095,13141,7456],{"class":1232},[1095,13143,1728],{"class":1228},[1095,13145,6581],{"class":1986},[1095,13147,13111],{"class":1986},[1095,13149,13114],{"class":1136},[1095,13151,5758],{"class":1116},[1095,13153,13154],{"class":1097,"line":3327},[1095,13155,5954],{"class":1136},[1095,13157,13158,13161,13163,13166,13168,13171],{"class":1097,"line":3332},[1095,13159,13160],{"class":1136},"        optimized_pipeline",[1095,13162,1124],{"class":1116},[1095,13164,13165],{"class":1148},"extend",[1095,13167,1117],{"class":1116},[1095,13169,13170],{"class":1148},"match_stages",[1095,13172,1164],{"class":1116},[1095,13174,13175,13177,13179,13181,13183,13186],{"class":1097,"line":3338},[1095,13176,13160],{"class":1136},[1095,13178,1124],{"class":1116},[1095,13180,13165],{"class":1148},[1095,13182,1117],{"class":1116},[1095,13184,13185],{"class":1148},"other_stages",[1095,13187,1164],{"class":1116},[1095,13189,13190],{"class":1097,"line":3369},[1095,13191,5954],{"class":1136},[1095,13193,13194,13196],{"class":1097,"line":3397},[1095,13195,3740],{"class":1670},[1095,13197,13198],{"class":1136}," optimized_pipeline\n",[1030,13200,13202],{"id":13201},"docker-configuration-for-mongodb","Docker Configuration for MongoDB",[1085,13204,13208],{"className":13205,"code":13206,"language":13207,"meta":1090,"style":1090},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# docker-compose.yml - MongoDB services\nversion: '3.8'\n\nservices:\n  # MongoDB Replica Set\n  mongo1:\n    image: mongo:7.0\n    command: mongod --replSet rs0 --bind_ip_all\n    environment:\n      MONGO_INITDB_ROOT_USERNAME: admin\n      MONGO_INITDB_ROOT_PASSWORD: password\n    volumes:\n      - mongo1_data:/data/db\n      - ./scripts/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js\n    ports:\n      - \"27017:27017\"\n    networks:\n      - microservices-network\n\n  mongo2:\n    image: mongo:7.0\n    command: mongod --replSet rs0 --bind_ip_all\n    environment:\n      MONGO_INITDB_ROOT_USERNAME: admin\n      MONGO_INITDB_ROOT_PASSWORD: password\n    volumes:\n      - mongo2_data:/data/db\n    ports:\n      - \"27018:27017\"\n    networks:\n      - microservices-network\n\n  mongo3:\n    image: mongo:7.0\n    command: mongod --replSet rs0 --bind_ip_all\n    environment:\n      MONGO_INITDB_ROOT_USERNAME: admin\n      MONGO_INITDB_ROOT_PASSWORD: password\n    volumes:\n      - mongo3_data:/data/db\n    ports:\n      - \"27019:27017\"\n    networks:\n      - microservices-network\n\n  # MongoDB Express for administration\n  mongo-express:\n    image: mongo-express:latest\n    environment:\n      ME_CONFIG_MONGODB_ADMINUSERNAME: admin\n      ME_CONFIG_MONGODB_ADMINPASSWORD: password\n      ME_CONFIG_MONGODB_SERVER: mongo1\n      ME_CONFIG_BASICAUTH_USERNAME: admin\n      ME_CONFIG_BASICAUTH_PASSWORD: password\n    ports:\n      - \"8081:8081\"\n    depends_on:\n      - mongo1\n    networks:\n      - microservices-network\n\nvolumes:\n  mongo1_data:\n  mongo2_data:\n  mongo3_data:\n\nnetworks:\n  microservices-network:\n    driver: bridge\n","yaml",[1092,13209,13210,13215,13230,13234,13241,13246,13253,13263,13273,13280,13290,13300,13307,13315,13322,13329,13341,13348,13355,13359,13366,13374,13382,13388,13396,13404,13410,13417,13423,13434,13440,13446,13450,13457,13465,13473,13479,13487,13495,13501,13508,13514,13525,13531,13537,13541,13546,13553,13562,13568,13577,13586,13596,13605,13614,13620,13631,13638,13644,13650,13656,13660,13667,13674,13681,13688,13692,13699,13706],{"__ignoreMap":1090},[1095,13211,13212],{"class":1097,"line":1098},[1095,13213,13214],{"class":1101},"# docker-compose.yml - MongoDB services\n",[1095,13216,13217,13221,13223,13225,13228],{"class":1097,"line":1105},[1095,13218,13220],{"class":13219},"suXOh","version",[1095,13222,1239],{"class":1116},[1095,13224,2038],{"class":1228},[1095,13226,13227],{"class":1232},"3.8",[1095,13229,5720],{"class":1228},[1095,13231,13232],{"class":1097,"line":1133},[1095,13233,1210],{"emptyLinePlaceholder":1209},[1095,13235,13236,13239],{"class":1097,"line":1167},[1095,13237,13238],{"class":13219},"services",[1095,13240,5557],{"class":1116},[1095,13242,13243],{"class":1097,"line":1185},[1095,13244,13245],{"class":1101},"  # MongoDB Replica Set\n",[1095,13247,13248,13251],{"class":1097,"line":1206},[1095,13249,13250],{"class":13219},"  mongo1",[1095,13252,5557],{"class":1116},[1095,13254,13255,13258,13260],{"class":1097,"line":1213},[1095,13256,13257],{"class":13219},"    image",[1095,13259,1239],{"class":1116},[1095,13261,13262],{"class":1232}," mongo:7.0\n",[1095,13264,13265,13268,13270],{"class":1097,"line":1219},[1095,13266,13267],{"class":13219},"    command",[1095,13269,1239],{"class":1116},[1095,13271,13272],{"class":1232}," mongod --replSet rs0 --bind_ip_all\n",[1095,13274,13275,13278],{"class":1097,"line":1225},[1095,13276,13277],{"class":13219},"    environment",[1095,13279,5557],{"class":1116},[1095,13281,13282,13285,13287],{"class":1097,"line":1257},[1095,13283,13284],{"class":13219},"      MONGO_INITDB_ROOT_USERNAME",[1095,13286,1239],{"class":1116},[1095,13288,13289],{"class":1232}," admin\n",[1095,13291,13292,13295,13297],{"class":1097,"line":1280},[1095,13293,13294],{"class":13219},"      MONGO_INITDB_ROOT_PASSWORD",[1095,13296,1239],{"class":1116},[1095,13298,13299],{"class":1232}," password\n",[1095,13301,13302,13305],{"class":1097,"line":1301},[1095,13303,13304],{"class":13219},"    volumes",[1095,13306,5557],{"class":1116},[1095,13308,13309,13312],{"class":1097,"line":1316},[1095,13310,13311],{"class":1116},"      -",[1095,13313,13314],{"class":1232}," mongo1_data:/data/db\n",[1095,13316,13317,13319],{"class":1097,"line":1338},[1095,13318,13311],{"class":1116},[1095,13320,13321],{"class":1232}," ./scripts/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js\n",[1095,13323,13324,13327],{"class":1097,"line":1352},[1095,13325,13326],{"class":13219},"    ports",[1095,13328,5557],{"class":1116},[1095,13330,13331,13333,13335,13338],{"class":1097,"line":1374},[1095,13332,13311],{"class":1116},[1095,13334,1269],{"class":1228},[1095,13336,13337],{"class":1232},"27017:27017",[1095,13339,13340],{"class":1228},"\"\n",[1095,13342,13343,13346],{"class":1097,"line":1388},[1095,13344,13345],{"class":13219},"    networks",[1095,13347,5557],{"class":1116},[1095,13349,13350,13352],{"class":1097,"line":1406},[1095,13351,13311],{"class":1116},[1095,13353,13354],{"class":1232}," microservices-network\n",[1095,13356,13357],{"class":1097,"line":1421},[1095,13358,1210],{"emptyLinePlaceholder":1209},[1095,13360,13361,13364],{"class":1097,"line":1427},[1095,13362,13363],{"class":13219},"  mongo2",[1095,13365,5557],{"class":1116},[1095,13367,13368,13370,13372],{"class":1097,"line":1433},[1095,13369,13257],{"class":13219},[1095,13371,1239],{"class":1116},[1095,13373,13262],{"class":1232},[1095,13375,13376,13378,13380],{"class":1097,"line":1448},[1095,13377,13267],{"class":13219},[1095,13379,1239],{"class":1116},[1095,13381,13272],{"class":1232},[1095,13383,13384,13386],{"class":1097,"line":1492},[1095,13385,13277],{"class":13219},[1095,13387,5557],{"class":1116},[1095,13389,13390,13392,13394],{"class":1097,"line":1532},[1095,13391,13284],{"class":13219},[1095,13393,1239],{"class":1116},[1095,13395,13289],{"class":1232},[1095,13397,13398,13400,13402],{"class":1097,"line":1538},[1095,13399,13294],{"class":13219},[1095,13401,1239],{"class":1116},[1095,13403,13299],{"class":1232},[1095,13405,13406,13408],{"class":1097,"line":1544},[1095,13407,13304],{"class":13219},[1095,13409,5557],{"class":1116},[1095,13411,13412,13414],{"class":1097,"line":1570},[1095,13413,13311],{"class":1116},[1095,13415,13416],{"class":1232}," mongo2_data:/data/db\n",[1095,13418,13419,13421],{"class":1097,"line":1595},[1095,13420,13326],{"class":13219},[1095,13422,5557],{"class":1116},[1095,13424,13425,13427,13429,13432],{"class":1097,"line":2163},[1095,13426,13311],{"class":1116},[1095,13428,1269],{"class":1228},[1095,13430,13431],{"class":1232},"27018:27017",[1095,13433,13340],{"class":1228},[1095,13435,13436,13438],{"class":1097,"line":2194},[1095,13437,13345],{"class":13219},[1095,13439,5557],{"class":1116},[1095,13441,13442,13444],{"class":1097,"line":2230},[1095,13443,13311],{"class":1116},[1095,13445,13354],{"class":1232},[1095,13447,13448],{"class":1097,"line":2251},[1095,13449,1210],{"emptyLinePlaceholder":1209},[1095,13451,13452,13455],{"class":1097,"line":2257},[1095,13453,13454],{"class":13219},"  mongo3",[1095,13456,5557],{"class":1116},[1095,13458,13459,13461,13463],{"class":1097,"line":2263},[1095,13460,13257],{"class":13219},[1095,13462,1239],{"class":1116},[1095,13464,13262],{"class":1232},[1095,13466,13467,13469,13471],{"class":1097,"line":2887},[1095,13468,13267],{"class":13219},[1095,13470,1239],{"class":1116},[1095,13472,13272],{"class":1232},[1095,13474,13475,13477],{"class":1097,"line":2937},[1095,13476,13277],{"class":13219},[1095,13478,5557],{"class":1116},[1095,13480,13481,13483,13485],{"class":1097,"line":2977},[1095,13482,13284],{"class":13219},[1095,13484,1239],{"class":1116},[1095,13486,13289],{"class":1232},[1095,13488,13489,13491,13493],{"class":1097,"line":3008},[1095,13490,13294],{"class":13219},[1095,13492,1239],{"class":1116},[1095,13494,13299],{"class":1232},[1095,13496,13497,13499],{"class":1097,"line":3032},[1095,13498,13304],{"class":13219},[1095,13500,5557],{"class":1116},[1095,13502,13503,13505],{"class":1097,"line":3038},[1095,13504,13311],{"class":1116},[1095,13506,13507],{"class":1232}," mongo3_data:/data/db\n",[1095,13509,13510,13512],{"class":1097,"line":3044},[1095,13511,13326],{"class":13219},[1095,13513,5557],{"class":1116},[1095,13515,13516,13518,13520,13523],{"class":1097,"line":3068},[1095,13517,13311],{"class":1116},[1095,13519,1269],{"class":1228},[1095,13521,13522],{"class":1232},"27019:27017",[1095,13524,13340],{"class":1228},[1095,13526,13527,13529],{"class":1097,"line":3092},[1095,13528,13345],{"class":13219},[1095,13530,5557],{"class":1116},[1095,13532,13533,13535],{"class":1097,"line":3117},[1095,13534,13311],{"class":1116},[1095,13536,13354],{"class":1232},[1095,13538,13539],{"class":1097,"line":3133},[1095,13540,1210],{"emptyLinePlaceholder":1209},[1095,13542,13543],{"class":1097,"line":3150},[1095,13544,13545],{"class":1101},"  # MongoDB Express for administration\n",[1095,13547,13548,13551],{"class":1097,"line":3155},[1095,13549,13550],{"class":13219},"  mongo-express",[1095,13552,5557],{"class":1116},[1095,13554,13555,13557,13559],{"class":1097,"line":3161},[1095,13556,13257],{"class":13219},[1095,13558,1239],{"class":1116},[1095,13560,13561],{"class":1232}," mongo-express:latest\n",[1095,13563,13564,13566],{"class":1097,"line":3194},[1095,13565,13277],{"class":13219},[1095,13567,5557],{"class":1116},[1095,13569,13570,13573,13575],{"class":1097,"line":3223},[1095,13571,13572],{"class":13219},"      ME_CONFIG_MONGODB_ADMINUSERNAME",[1095,13574,1239],{"class":1116},[1095,13576,13289],{"class":1232},[1095,13578,13579,13582,13584],{"class":1097,"line":3252},[1095,13580,13581],{"class":13219},"      ME_CONFIG_MONGODB_ADMINPASSWORD",[1095,13583,1239],{"class":1116},[1095,13585,13299],{"class":1232},[1095,13587,13588,13591,13593],{"class":1097,"line":3257},[1095,13589,13590],{"class":13219},"      ME_CONFIG_MONGODB_SERVER",[1095,13592,1239],{"class":1116},[1095,13594,13595],{"class":1232}," mongo1\n",[1095,13597,13598,13601,13603],{"class":1097,"line":3263},[1095,13599,13600],{"class":13219},"      ME_CONFIG_BASICAUTH_USERNAME",[1095,13602,1239],{"class":1116},[1095,13604,13289],{"class":1232},[1095,13606,13607,13610,13612],{"class":1097,"line":3287},[1095,13608,13609],{"class":13219},"      ME_CONFIG_BASICAUTH_PASSWORD",[1095,13611,1239],{"class":1116},[1095,13613,13299],{"class":1232},[1095,13615,13616,13618],{"class":1097,"line":3311},[1095,13617,13326],{"class":13219},[1095,13619,5557],{"class":1116},[1095,13621,13622,13624,13626,13629],{"class":1097,"line":3327},[1095,13623,13311],{"class":1116},[1095,13625,1269],{"class":1228},[1095,13627,13628],{"class":1232},"8081:8081",[1095,13630,13340],{"class":1228},[1095,13632,13633,13636],{"class":1097,"line":3332},[1095,13634,13635],{"class":13219},"    depends_on",[1095,13637,5557],{"class":1116},[1095,13639,13640,13642],{"class":1097,"line":3338},[1095,13641,13311],{"class":1116},[1095,13643,13595],{"class":1232},[1095,13645,13646,13648],{"class":1097,"line":3369},[1095,13647,13345],{"class":13219},[1095,13649,5557],{"class":1116},[1095,13651,13652,13654],{"class":1097,"line":3397},[1095,13653,13311],{"class":1116},[1095,13655,13354],{"class":1232},[1095,13657,13658],{"class":1097,"line":3413},[1095,13659,1210],{"emptyLinePlaceholder":1209},[1095,13661,13662,13665],{"class":1097,"line":3418},[1095,13663,13664],{"class":13219},"volumes",[1095,13666,5557],{"class":1116},[1095,13668,13669,13672],{"class":1097,"line":3424},[1095,13670,13671],{"class":13219},"  mongo1_data",[1095,13673,5557],{"class":1116},[1095,13675,13676,13679],{"class":1097,"line":3434},[1095,13677,13678],{"class":13219},"  mongo2_data",[1095,13680,5557],{"class":1116},[1095,13682,13683,13686],{"class":1097,"line":3455},[1095,13684,13685],{"class":13219},"  mongo3_data",[1095,13687,5557],{"class":1116},[1095,13689,13690],{"class":1097,"line":3469},[1095,13691,1210],{"emptyLinePlaceholder":1209},[1095,13693,13694,13697],{"class":1097,"line":3480},[1095,13695,13696],{"class":13219},"networks",[1095,13698,5557],{"class":1116},[1095,13700,13701,13704],{"class":1097,"line":3491},[1095,13702,13703],{"class":13219},"  microservices-network",[1095,13705,5557],{"class":1116},[1095,13707,13708,13711,13713],{"class":1097,"line":3502},[1095,13709,13710],{"class":13219},"    driver",[1095,13712,1239],{"class":1116},[1095,13714,13715],{"class":1232}," bridge\n",[1085,13717,13721],{"className":13718,"code":13719,"language":13720,"meta":1090,"style":1090},"language-javascript shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","// scripts/mongo-init.js\n// Initialize replica set\nrs.initiate({\n  _id: \"rs0\",\n  members: [\n    { _id: 0, host: \"mongo1:27017\", priority: 2 },\n    { _id: 1, host: \"mongo2:27017\", priority: 1 },\n    { _id: 2, host: \"mongo3:27017\", priority: 1 }\n  ]\n});\n\n// Create databases and users\nuse('user_service_db');\ndb.createUser({\n  user: 'user_service',\n  pwd: 'user_service_password',\n  roles: [{ role: 'readWrite', db: 'user_service_db' }]\n});\n\nuse('product_service_db');\ndb.createUser({\n  user: 'product_service',\n  pwd: 'product_service_password',\n  roles: [{ role: 'readWrite', db: 'product_service_db' }]\n});\n","javascript",[1092,13722,13723,13728,13733,13749,13765,13774,13812,13845,13879,13884,13893,13897,13902,13919,13932,13948,13964,14005,14013,14017,14034,14046,14061,14076,14112],{"__ignoreMap":1090},[1095,13724,13725],{"class":1097,"line":1098},[1095,13726,13727],{"class":1101},"// scripts/mongo-init.js\n",[1095,13729,13730],{"class":1097,"line":1105},[1095,13731,13732],{"class":1101},"// Initialize replica set\n",[1095,13734,13735,13739,13741,13744,13747],{"class":1097,"line":1133},[1095,13736,13738],{"class":13737},"sSC40","rs",[1095,13740,1124],{"class":1116},[1095,13742,13743],{"class":3675},"initiate",[1095,13745,1117],{"class":13746},"snCua",[1095,13748,1222],{"class":1116},[1095,13750,13751,13754,13756,13758,13761,13763],{"class":1097,"line":1167},[1095,13752,13753],{"class":13219},"  _id",[1095,13755,1239],{"class":1116},[1095,13757,1269],{"class":1228},[1095,13759,13760],{"class":1232},"rs0",[1095,13762,1236],{"class":1228},[1095,13764,1277],{"class":1116},[1095,13766,13767,13770,13772],{"class":1097,"line":1185},[1095,13768,13769],{"class":13219},"  members",[1095,13771,1239],{"class":1116},[1095,13773,1445],{"class":13746},[1095,13775,13776,13779,13782,13784,13786,13788,13791,13793,13795,13798,13800,13802,13805,13807,13809],{"class":1097,"line":1206},[1095,13777,13778],{"class":1116},"    {",[1095,13780,13781],{"class":13219}," _id",[1095,13783,1239],{"class":1116},[1095,13785,8078],{"class":1160},[1095,13787,1470],{"class":1116},[1095,13789,13790],{"class":13219}," host",[1095,13792,1239],{"class":1116},[1095,13794,1269],{"class":1228},[1095,13796,13797],{"class":1232},"mongo1:27017",[1095,13799,1236],{"class":1228},[1095,13801,1470],{"class":1116},[1095,13803,13804],{"class":13219}," priority",[1095,13806,1239],{"class":1116},[1095,13808,3644],{"class":1160},[1095,13810,13811],{"class":1116}," },\n",[1095,13813,13814,13816,13818,13820,13822,13824,13826,13828,13830,13833,13835,13837,13839,13841,13843],{"class":1097,"line":1213},[1095,13815,13778],{"class":1116},[1095,13817,13781],{"class":13219},[1095,13819,1239],{"class":1116},[1095,13821,7539],{"class":1160},[1095,13823,1470],{"class":1116},[1095,13825,13790],{"class":13219},[1095,13827,1239],{"class":1116},[1095,13829,1269],{"class":1228},[1095,13831,13832],{"class":1232},"mongo2:27017",[1095,13834,1236],{"class":1228},[1095,13836,1470],{"class":1116},[1095,13838,13804],{"class":13219},[1095,13840,1239],{"class":1116},[1095,13842,7539],{"class":1160},[1095,13844,13811],{"class":1116},[1095,13846,13847,13849,13851,13853,13855,13857,13859,13861,13863,13866,13868,13870,13872,13874,13876],{"class":1097,"line":1219},[1095,13848,13778],{"class":1116},[1095,13850,13781],{"class":13219},[1095,13852,1239],{"class":1116},[1095,13854,3644],{"class":1160},[1095,13856,1470],{"class":1116},[1095,13858,13790],{"class":13219},[1095,13860,1239],{"class":1116},[1095,13862,1269],{"class":1228},[1095,13864,13865],{"class":1232},"mongo3:27017",[1095,13867,1236],{"class":1228},[1095,13869,1470],{"class":1116},[1095,13871,13804],{"class":13219},[1095,13873,1239],{"class":1116},[1095,13875,7539],{"class":1160},[1095,13877,13878],{"class":1116}," }\n",[1095,13880,13881],{"class":1097,"line":1225},[1095,13882,13883],{"class":13746},"  ]\n",[1095,13885,13886,13888,13890],{"class":1097,"line":1257},[1095,13887,10827],{"class":1116},[1095,13889,6708],{"class":13746},[1095,13891,13892],{"class":1116},";\n",[1095,13894,13895],{"class":1097,"line":1280},[1095,13896,1210],{"emptyLinePlaceholder":1209},[1095,13898,13899],{"class":1097,"line":1301},[1095,13900,13901],{"class":1101},"// Create databases and users\n",[1095,13903,13904,13907,13909,13911,13913,13915,13917],{"class":1097,"line":1316},[1095,13905,13906],{"class":3675},"use",[1095,13908,1117],{"class":13746},[1095,13910,1728],{"class":1228},[1095,13912,1754],{"class":1232},[1095,13914,1728],{"class":1228},[1095,13916,6708],{"class":13746},[1095,13918,13892],{"class":1116},[1095,13920,13921,13923,13925,13928,13930],{"class":1097,"line":1338},[1095,13922,1725],{"class":13737},[1095,13924,1124],{"class":1116},[1095,13926,13927],{"class":3675},"createUser",[1095,13929,1117],{"class":13746},[1095,13931,1222],{"class":1116},[1095,13933,13934,13937,13939,13941,13944,13946],{"class":1097,"line":1352},[1095,13935,13936],{"class":13219},"  user",[1095,13938,1239],{"class":1116},[1095,13940,2038],{"class":1228},[1095,13942,13943],{"class":1232},"user_service",[1095,13945,1728],{"class":1228},[1095,13947,1277],{"class":1116},[1095,13949,13950,13953,13955,13957,13960,13962],{"class":1097,"line":1374},[1095,13951,13952],{"class":13219},"  pwd",[1095,13954,1239],{"class":1116},[1095,13956,2038],{"class":1228},[1095,13958,13959],{"class":1232},"user_service_password",[1095,13961,1728],{"class":1228},[1095,13963,1277],{"class":1116},[1095,13965,13966,13969,13971,13973,13975,13978,13980,13982,13985,13987,13989,13992,13994,13996,13998,14000,14003],{"class":1097,"line":1388},[1095,13967,13968],{"class":13219},"  roles",[1095,13970,1239],{"class":1116},[1095,13972,3543],{"class":13746},[1095,13974,10822],{"class":1116},[1095,13976,13977],{"class":13219}," role",[1095,13979,1239],{"class":1116},[1095,13981,2038],{"class":1228},[1095,13983,13984],{"class":1232},"readWrite",[1095,13986,1728],{"class":1228},[1095,13988,1470],{"class":1116},[1095,13990,13991],{"class":13219}," db",[1095,13993,1239],{"class":1116},[1095,13995,2038],{"class":1228},[1095,13997,1754],{"class":1232},[1095,13999,1728],{"class":1228},[1095,14001,14002],{"class":1116}," }",[1095,14004,5758],{"class":13746},[1095,14006,14007,14009,14011],{"class":1097,"line":1406},[1095,14008,10827],{"class":1116},[1095,14010,6708],{"class":13746},[1095,14012,13892],{"class":1116},[1095,14014,14015],{"class":1097,"line":1421},[1095,14016,1210],{"emptyLinePlaceholder":1209},[1095,14018,14019,14021,14023,14025,14028,14030,14032],{"class":1097,"line":1427},[1095,14020,13906],{"class":3675},[1095,14022,1117],{"class":13746},[1095,14024,1728],{"class":1228},[1095,14026,14027],{"class":1232},"product_service_db",[1095,14029,1728],{"class":1228},[1095,14031,6708],{"class":13746},[1095,14033,13892],{"class":1116},[1095,14035,14036,14038,14040,14042,14044],{"class":1097,"line":1433},[1095,14037,1725],{"class":13737},[1095,14039,1124],{"class":1116},[1095,14041,13927],{"class":3675},[1095,14043,1117],{"class":13746},[1095,14045,1222],{"class":1116},[1095,14047,14048,14050,14052,14054,14057,14059],{"class":1097,"line":1448},[1095,14049,13936],{"class":13219},[1095,14051,1239],{"class":1116},[1095,14053,2038],{"class":1228},[1095,14055,14056],{"class":1232},"product_service",[1095,14058,1728],{"class":1228},[1095,14060,1277],{"class":1116},[1095,14062,14063,14065,14067,14069,14072,14074],{"class":1097,"line":1492},[1095,14064,13952],{"class":13219},[1095,14066,1239],{"class":1116},[1095,14068,2038],{"class":1228},[1095,14070,14071],{"class":1232},"product_service_password",[1095,14073,1728],{"class":1228},[1095,14075,1277],{"class":1116},[1095,14077,14078,14080,14082,14084,14086,14088,14090,14092,14094,14096,14098,14100,14102,14104,14106,14108,14110],{"class":1097,"line":1532},[1095,14079,13968],{"class":13219},[1095,14081,1239],{"class":1116},[1095,14083,3543],{"class":13746},[1095,14085,10822],{"class":1116},[1095,14087,13977],{"class":13219},[1095,14089,1239],{"class":1116},[1095,14091,2038],{"class":1228},[1095,14093,13984],{"class":1232},[1095,14095,1728],{"class":1228},[1095,14097,1470],{"class":1116},[1095,14099,13991],{"class":13219},[1095,14101,1239],{"class":1116},[1095,14103,2038],{"class":1228},[1095,14105,14027],{"class":1232},[1095,14107,1728],{"class":1228},[1095,14109,14002],{"class":1116},[1095,14111,5758],{"class":13746},[1095,14113,14114,14116,14118],{"class":1097,"line":1538},[1095,14115,10827],{"class":1116},[1095,14117,6708],{"class":13746},[1095,14119,13892],{"class":1116},[1030,14121,14123],{"id":14122},"summary","Summary",[1026,14125,14126],{},"MongoDB provides excellent support for microservices with its flexible schema, powerful aggregation framework, and cloud-native features. Key benefits include:",[14128,14129,14130,14136,14141,14147,14153],"ul",{},[1043,14131,14132,14135],{},[1046,14133,14134],{},"Flexible Schema",": Easy evolution of data models",[1043,14137,14138,14140],{},[1046,14139,1054],{},": Built-in sharding capabilities",[1043,14142,14143,14146],{},[1046,14144,14145],{},"Real-time Updates",": Change streams for event-driven architecture",[1043,14148,14149,14152],{},[1046,14150,14151],{},"Rich Queries",": Powerful aggregation pipelines",[1043,14154,14155,14158],{},[1046,14156,14157],{},"High Availability",": Replica sets for fault tolerance",[1026,14160,14161],{},"The combination of Django and MongoDB creates a robust foundation for microservices that can scale and adapt to changing requirements. In the next section, we'll explore creating RESTful APIs for microservices communication.",[14163,14164,14165],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s6DHA, html code.shiki .s6DHA{--shiki-light:#6182B8;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}",{"title":1090,"searchDepth":1098,"depth":1105,"links":14167},[14168,14172,14178,14184,14185],{"id":1032,"depth":1105,"text":1033,"children":14169},[14170,14171],{"id":1037,"depth":1133,"text":1038},{"id":1082,"depth":1133,"text":1083},{"id":1600,"depth":1105,"text":1601,"children":14173},[14174,14175,14176,14177],{"id":1604,"depth":1133,"text":1605},{"id":2268,"depth":1133,"text":2269},{"id":4905,"depth":1133,"text":4906},{"id":6230,"depth":1133,"text":6231},{"id":8707,"depth":1105,"text":8708,"children":14179},[14180,14181,14182,14183],{"id":8711,"depth":1133,"text":8712},{"id":10362,"depth":1133,"text":10363},{"id":11644,"depth":1133,"text":11645},{"id":12360,"depth":1133,"text":12361},{"id":13201,"depth":1105,"text":13202},{"id":14122,"depth":1105,"text":14123},"md",null,{},{"title":893,"description":1028},"Xic4YRR2V_NVIiEWYDGTAx5ASMdOZMMYb6ECcoHfmVY",[14192,14194],{"title":889,"path":890,"stem":891,"description":14193,"children":-1},"Setting up a proper development and runtime environment is crucial for successful microservices development with Django. This section covers everything from local development setup to production-ready deployment configurations.",{"title":897,"path":898,"stem":899,"description":14195,"children":-1},"RESTful APIs are the backbone of microservices communication. This section covers designing, implementing, and optimizing REST APIs using Django REST Framework for microservices architecture.",1772474963007]