<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>NoSQLBooster for MongoDB Blog</title>
    <link>https://www.nosqlbooster.com/blog/</link>
    
    <image>
      <url>https://www.gravatar.com/avatar/b530b74a59b4c8d79d18a9303001d65e</url>
      <title>NoSQLBooster for MongoDB Blog</title>
      <link>https://www.nosqlbooster.com/blog/</link>
    </image>
    
    <atom:link href="https://www.nosqlbooster.com/blog/rss2.xml" rel="self" type="application/rss+xml"/>
    
    <description>NoSQLBooster for MongoDB - Essential Admin GUI for MongoDB 3.6-8.0</description>
    <pubDate>Sat, 07 Mar 2026 06:29:10 GMT</pubDate>
    <generator>http://hexo.io/</generator>
    
    <item>
      <title>NoSQLBooster 10.1 Released! Custom AI Model Support, Enhanced ObjectId Display, Optimized Dark Theme</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-10-1/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-10-1/</guid>
      <pubDate>Sat, 07 Mar 2026 07:00:00 GMT</pubDate>
      
      <description>&lt;p&gt;We are pleased to announce the release of NoSQLBooster 10.1. This new version introduces support for custom AI models, enhanced command execution features, improved ObjectId field display with humanized timestamps, and an optimized dark theme. These updates aim to provide users with greater flexibility and a better overall user experience.&lt;/p&gt;
&lt;p&gt;If you want to try NoSQLBooster 10.1 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 10.1 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s dive in and get an overview of what&amp;#39;s coming in NoSQLBooster 10.1!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h1 id=&quot;What-s-new&quot;&gt;&lt;a href=&quot;#What-s-new&quot; class=&quot;headerlink&quot; title=&quot;What&amp;#39;s new?&quot;&gt;&lt;/a&gt;What&amp;#39;s new?&lt;/h1&gt;&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#custom-ai-model-support&quot;&gt;Custom AI Model Support&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#adding-your-own-ai-model&quot;&gt;Adding Your Own AI Model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuration-file-user_modelconfigjs&quot;&gt;Configuration File: user_model.config.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#enhanced-command-execution-ctrlf6-cmdf6&quot;&gt;Enhanced Command Execution (Ctrl+F6 &amp;#x2F; Cmd+F6)&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#how-it-works&quot;&gt;How It Works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#usage-example&quot;&gt;Usage Example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#enhanced-objectid-field-display-with-humanized-timestamps&quot;&gt;Enhanced ObjectId Field Display with Humanized Timestamps&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#new-display-format&quot;&gt;New Display Format&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#optimized-dark-theme&quot;&gt;Optimized Dark Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bug-fixes&quot;&gt;Bug Fixes&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#fixed-mongodb-server-help-documentation&quot;&gt;Fixed MongoDB Server Help Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#fixed-field-display-bug-in-index-creation-dialog&quot;&gt;Fixed Field Display Bug in Index Creation Dialog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#fixed-field-display-bug-in-export-dialog&quot;&gt;Fixed Field Display Bug in Export Dialog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#patch-releases&quot;&gt;Patch Releases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-1011&quot;&gt;Version 10.1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1012&quot;&gt;Version 10.1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1013&quot;&gt;Version 10.1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1014&quot;&gt;Version 10.1.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h2 id=&quot;Custom-AI-Model-Support&quot;&gt;&lt;a href=&quot;#Custom-AI-Model-Support&quot; class=&quot;headerlink&quot; title=&quot;Custom AI Model Support&quot;&gt;&lt;/a&gt;Custom AI Model Support&lt;/h2&gt;&lt;p&gt;NoSQLBooster 10.1 empowers users to integrate their own AI models into the AI Helper feature. This enhancement provides greater flexibility for organizations that want to use their preferred AI providers or custom-trained models.&lt;/p&gt;
&lt;h3 id=&quot;Adding-Your-Own-AI-Model&quot;&gt;&lt;a href=&quot;#Adding-Your-Own-AI-Model&quot; class=&quot;headerlink&quot; title=&quot;Adding Your Own AI Model&quot;&gt;&lt;/a&gt;Adding Your Own AI Model&lt;/h3&gt;&lt;p&gt;Users can now configure custom AI models through the application settings. This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect to alternative AI model providers&lt;/li&gt;
&lt;li&gt;Use organization-specific models&lt;/li&gt;
&lt;li&gt;Leverage private or custom-trained AI models for enhanced security and customization&lt;/li&gt;
&lt;li&gt;Maintain full control over your data and AI processing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To add a custom AI model, navigate to &lt;strong&gt;Menu -&amp;gt; Options -&amp;gt; AI Settings -&amp;gt; Edit&amp;#x2F;Add Models...&lt;/strong&gt; and configure your model endpoint and API key.&lt;/p&gt;
&lt;h3 id=&quot;Configuration-File-user-model-config-js&quot;&gt;&lt;a href=&quot;#Configuration-File-user-model-config-js&quot; class=&quot;headerlink&quot; title=&quot;Configuration File: user_model.config.js&quot;&gt;&lt;/a&gt;Configuration File: user_model.config.js&lt;/h3&gt;&lt;p&gt;Custom AI models are configured through the &lt;code&gt;user_model.config.js&lt;/code&gt; file, which defines your custom model endpoints and parameters. Here&amp;#39;s the configuration structure:&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * user_model.config.js - User-defined model configuration file&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * Define custom API endpoints and model configurations.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * These configurations are loaded client-side for direct API connection.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;variable language_&quot;&gt;module&lt;/span&gt;.&lt;span class=&quot;property&quot;&gt;exports&lt;/span&gt; = &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;models&lt;/span&gt;: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;key&lt;/span&gt;: string,                    &lt;span class=&quot;comment&quot;&gt;// Unique identifier (required)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;: string,                   &lt;span class=&quot;comment&quot;&gt;// Display name in AI Helper (required)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      description?: string,           &lt;span class=&quot;comment&quot;&gt;// Optional model description&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;baseURL&lt;/span&gt;: string,                &lt;span class=&quot;comment&quot;&gt;// API base URL (required)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      endpoint?: string,              &lt;span class=&quot;comment&quot;&gt;// API endpoint path, defaults to /chat/completions&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      modelName?: string,             &lt;span class=&quot;comment&quot;&gt;// Model name to send to API, defaults to key&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      apiKey?: string,                &lt;span class=&quot;comment&quot;&gt;// API key (optional)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      headers?: object,               &lt;span class=&quot;comment&quot;&gt;// Custom request headers (optional)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      maxTokens?: number,             &lt;span class=&quot;comment&quot;&gt;// Maximum tokens to generate (optional)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      temperature?: number,           &lt;span class=&quot;comment&quot;&gt;// Temperature parameter (optional)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      requestTransformer?: &lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;,  &lt;span class=&quot;comment&quot;&gt;// Custom request transformation (optional)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      responseTransformer?: &lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;  &lt;span class=&quot;comment&quot;&gt;// Custom response transformation (optional)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;This feature is particularly valuable for enterprises that require:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data privacy and security&lt;/li&gt;
&lt;li&gt;Integration with proprietary AI systems&lt;/li&gt;
&lt;li&gt;Custom model fine-tuning based on domain-specific knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/user-ai-models.png&quot; alt=&quot;User AI Models&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Enhanced-Command-Execution-Ctrl-F6-Cmd-F6&quot;&gt;&lt;a href=&quot;#Enhanced-Command-Execution-Ctrl-F6-Cmd-F6&quot; class=&quot;headerlink&quot; title=&quot;Enhanced Command Execution (Ctrl+F6 &amp;#x2F; Cmd+F6)&quot;&gt;&lt;/a&gt;Enhanced Command Execution (Ctrl+F6 &amp;#x2F; Cmd+F6)&lt;/h2&gt;&lt;p&gt;NoSQLBooster 10.1 introduces a new keyboard shortcut for executing scripts with automatic tab management. This command provides a streamlined workflow for developers on all platforms:&lt;/p&gt;
&lt;h3 id=&quot;How-It-Works&quot;&gt;&lt;a href=&quot;#How-It-Works&quot; class=&quot;headerlink&quot; title=&quot;How It Works&quot;&gt;&lt;/a&gt;How It Works&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows&amp;#x2F;Linux:&lt;/strong&gt; Press &lt;strong&gt;Ctrl+F6&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS:&lt;/strong&gt; Press &lt;strong&gt;Cmd+F6&lt;/strong&gt; (or &lt;strong&gt;Mod+F6&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These shortcuts will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Close all currently open tabs&lt;/li&gt;
&lt;li&gt;Execute the current statement in the editor&lt;/li&gt;
&lt;li&gt;Display the results in a clean, focused environment&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This feature is ideal for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running complex statements without distraction&lt;/li&gt;
&lt;li&gt;Testing isolated queries in a clean workspace&lt;/li&gt;
&lt;li&gt;Improving focus during intensive development sessions&lt;/li&gt;
&lt;li&gt;Automating repetitive testing workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/enhanced-command-execution.png&quot; alt=&quot;Enhanced Command Execution&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;Usage-Example&quot;&gt;&lt;a href=&quot;#Usage-Example&quot; class=&quot;headerlink&quot; title=&quot;Usage Example&quot;&gt;&lt;/a&gt;Usage Example&lt;/h3&gt;&lt;p&gt;Simply position your cursor on the statement you want to execute and press the appropriate shortcut for your platform. The editor will close other tabs and run your statement immediately.&lt;/p&gt;
&lt;h2 id=&quot;Enhanced-ObjectId-Field-Display-with-Humanized-Timestamps&quot;&gt;&lt;a href=&quot;#Enhanced-ObjectId-Field-Display-with-Humanized-Timestamps&quot; class=&quot;headerlink&quot; title=&quot;Enhanced ObjectId Field Display with Humanized Timestamps&quot;&gt;&lt;/a&gt;Enhanced ObjectId Field Display with Humanized Timestamps&lt;/h2&gt;&lt;p&gt;NoSQLBooster 10.1 improves how ObjectId fields are displayed in the treegrid and document viewers. ObjectIds now show both the formatted value and a human-readable relative timestamp.&lt;/p&gt;
&lt;h3 id=&quot;New-Display-Format&quot;&gt;&lt;a href=&quot;#New-Display-Format&quot; class=&quot;headerlink&quot; title=&quot;New Display Format&quot;&gt;&lt;/a&gt;New Display Format&lt;/h3&gt;&lt;p&gt;ObjectId fields are now displayed as:&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ObjectId(&amp;quot;507f1f77bcf86cd799439011&amp;quot;) (a year ago)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;The relative time portion uses &amp;quot;humanized&amp;quot; formatting, making it easy to understand when documents were created at a glance. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ObjectId(&amp;quot;...&amp;quot;) (a few seconds ago)&lt;/li&gt;
&lt;li&gt;ObjectId(&amp;quot;...&amp;quot;) (5 minutes ago)&lt;/li&gt;
&lt;li&gt;ObjectId(&amp;quot;...&amp;quot;) (2 hours ago)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This enhancement makes it much easier to quickly assess document age without needing to manually calculate timestamps, especially useful when reviewing historical data or debugging time-sensitive issues.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/objectid-new-display-format.png&quot; alt=&quot;ObjectId New Display Format&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Optimized-Dark-Theme&quot;&gt;&lt;a href=&quot;#Optimized-Dark-Theme&quot; class=&quot;headerlink&quot; title=&quot;Optimized Dark Theme&quot;&gt;&lt;/a&gt;Optimized Dark Theme&lt;/h2&gt;&lt;p&gt;The dark theme has been completely redesigned and optimized in version 10.1 for better visual comfort and reduced eye strain during extended work sessions. Improvements include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Better contrast ratios for improved readability&lt;/li&gt;
&lt;li&gt;Refined color palette for reduced visual fatigue&lt;/li&gt;
&lt;li&gt;Optimized highlighting for syntax elements&lt;/li&gt;
&lt;li&gt;Improved visibility for UI controls and buttons&lt;/li&gt;
&lt;li&gt;Enhanced styling for data grid and tree views&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Users can enable the dark theme through &lt;strong&gt;Menu -&amp;gt; Options -&amp;gt; Change Theme&lt;/strong&gt;.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We are pleased to announce the release of NoSQLBooster 10.1. This new version introduces support for custom AI models, enhanced command execution features, improved ObjectId field display with humanized timestamps, and an optimized dark theme. These updates aim to provide users with greater flexibility and a better overall user experience.</p><p>If you want to try NoSQLBooster 10.1 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 10.1 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>Let&#39;s dive in and get an overview of what&#39;s coming in NoSQLBooster 10.1!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#custom-ai-model-support">Custom AI Model Support</a><ul><li><a href="#adding-your-own-ai-model">Adding Your Own AI Model</a></li><li><a href="#configuration-file-user_modelconfigjs">Configuration File: user_model.config.js</a></li></ul></li><li><a href="#enhanced-command-execution-ctrlf6-cmdf6">Enhanced Command Execution (Ctrl+F6 &#x2F; Cmd+F6)</a><ul><li><a href="#how-it-works">How It Works</a></li><li><a href="#usage-example">Usage Example</a></li></ul></li><li><a href="#enhanced-objectid-field-display-with-humanized-timestamps">Enhanced ObjectId Field Display with Humanized Timestamps</a><ul><li><a href="#new-display-format">New Display Format</a></li></ul></li><li><a href="#optimized-dark-theme">Optimized Dark Theme</a></li><li><a href="#bug-fixes">Bug Fixes</a><ul><li><a href="#fixed-mongodb-server-help-documentation">Fixed MongoDB Server Help Documentation</a></li><li><a href="#fixed-field-display-bug-in-index-creation-dialog">Fixed Field Display Bug in Index Creation Dialog</a></li><li><a href="#fixed-field-display-bug-in-export-dialog">Fixed Field Display Bug in Export Dialog</a></li></ul></li></ul><ul><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-1011">Version 10.1.1</a></li><li><a href="#version-1012">Version 10.1.2</a></li><li><a href="#version-1013">Version 10.1.3</a></li><li><a href="#version-1014">Version 10.1.4</a></li></ul></li></ul><!-- tocstop --><h2><span id="custom-ai-model-support">Custom AI Model Support</span></h2><p>NoSQLBooster 10.1 empowers users to integrate their own AI models into the AI Helper feature. This enhancement provides greater flexibility for organizations that want to use their preferred AI providers or custom-trained models.</p><h3><span id="adding-your-own-ai-model">Adding Your Own AI Model</span></h3><p>Users can now configure custom AI models through the application settings. This allows you to:</p><ul><li>Connect to alternative AI model providers</li><li>Use organization-specific models</li><li>Leverage private or custom-trained AI models for enhanced security and customization</li><li>Maintain full control over your data and AI processing</li></ul><p>To add a custom AI model, navigate to <strong>Menu -&gt; Options -&gt; AI Settings -&gt; Edit&#x2F;Add Models...</strong> and configure your model endpoint and API key.</p><h3><span id="configuration-file-user_modelconfigjs">Configuration File: user_model.config.js</span></h3><p>Custom AI models are configured through the <code>user_model.config.js</code> file, which defines your custom model endpoints and parameters. Here&#39;s the configuration structure:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * user_model.config.js - User-defined model configuration file</span></span><br><span class="line"><span class="comment"> * </span></span><br><span class="line"><span class="comment"> * Define custom API endpoints and model configurations.</span></span><br><span class="line"><span class="comment"> * These configurations are loaded client-side for direct API connection.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">models</span>: [</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">key</span>: string,                    <span class="comment">// Unique identifier (required)</span></span><br><span class="line">      <span class="attr">name</span>: string,                   <span class="comment">// Display name in AI Helper (required)</span></span><br><span class="line">      description?: string,           <span class="comment">// Optional model description</span></span><br><span class="line">      <span class="attr">baseURL</span>: string,                <span class="comment">// API base URL (required)</span></span><br><span class="line">      endpoint?: string,              <span class="comment">// API endpoint path, defaults to /chat/completions</span></span><br><span class="line">      modelName?: string,             <span class="comment">// Model name to send to API, defaults to key</span></span><br><span class="line">      apiKey?: string,                <span class="comment">// API key (optional)</span></span><br><span class="line">      headers?: object,               <span class="comment">// Custom request headers (optional)</span></span><br><span class="line">      maxTokens?: number,             <span class="comment">// Maximum tokens to generate (optional)</span></span><br><span class="line">      temperature?: number,           <span class="comment">// Temperature parameter (optional)</span></span><br><span class="line">      requestTransformer?: <span class="keyword">function</span>,  <span class="comment">// Custom request transformation (optional)</span></span><br><span class="line">      responseTransformer?: <span class="keyword">function</span>  <span class="comment">// Custom response transformation (optional)</span></span><br><span class="line">    &#125;</span><br><span class="line">  ]</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>This feature is particularly valuable for enterprises that require:</p><ul><li>Data privacy and security</li><li>Integration with proprietary AI systems</li><li>Custom model fine-tuning based on domain-specific knowledge</li></ul><p><img src="/blog/img/user-ai-models.png" alt="User AI Models"></p><h2><span id="enhanced-command-execution-ctrlf6-x2f-cmdf6">Enhanced Command Execution (Ctrl+F6 &#x2F; Cmd+F6)</span></h2><p>NoSQLBooster 10.1 introduces a new keyboard shortcut for executing scripts with automatic tab management. This command provides a streamlined workflow for developers on all platforms:</p><h3><span id="how-it-works">How It Works</span></h3><ul><li><strong>Windows&#x2F;Linux:</strong> Press <strong>Ctrl+F6</strong></li><li><strong>macOS:</strong> Press <strong>Cmd+F6</strong> (or <strong>Mod+F6</strong>)</li></ul><p>These shortcuts will:</p><ol><li>Close all currently open tabs</li><li>Execute the current statement in the editor</li><li>Display the results in a clean, focused environment</li></ol><p>This feature is ideal for:</p><ul><li>Running complex statements without distraction</li><li>Testing isolated queries in a clean workspace</li><li>Improving focus during intensive development sessions</li><li>Automating repetitive testing workflows</li></ul><p><img src="/blog/img/enhanced-command-execution.png" alt="Enhanced Command Execution"></p><h3><span id="usage-example">Usage Example</span></h3><p>Simply position your cursor on the statement you want to execute and press the appropriate shortcut for your platform. The editor will close other tabs and run your statement immediately.</p><h2><span id="enhanced-objectid-field-display-with-humanized-timestamps">Enhanced ObjectId Field Display with Humanized Timestamps</span></h2><p>NoSQLBooster 10.1 improves how ObjectId fields are displayed in the treegrid and document viewers. ObjectIds now show both the formatted value and a human-readable relative timestamp.</p><h3><span id="new-display-format">New Display Format</span></h3><p>ObjectId fields are now displayed as:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ObjectId(&quot;507f1f77bcf86cd799439011&quot;) (a year ago)</span><br></pre></td></tr></table></figure><p>The relative time portion uses &quot;humanized&quot; formatting, making it easy to understand when documents were created at a glance. For example:</p><ul><li>ObjectId(&quot;...&quot;) (a few seconds ago)</li><li>ObjectId(&quot;...&quot;) (5 minutes ago)</li><li>ObjectId(&quot;...&quot;) (2 hours ago)</li></ul><p>This enhancement makes it much easier to quickly assess document age without needing to manually calculate timestamps, especially useful when reviewing historical data or debugging time-sensitive issues.</p><p><img src="/blog/img/objectid-new-display-format.png" alt="ObjectId New Display Format"></p><h2><span id="optimized-dark-theme">Optimized Dark Theme</span></h2><p>The dark theme has been completely redesigned and optimized in version 10.1 for better visual comfort and reduced eye strain during extended work sessions. Improvements include:</p><ul><li>Better contrast ratios for improved readability</li><li>Refined color palette for reduced visual fatigue</li><li>Optimized highlighting for syntax elements</li><li>Improved visibility for UI controls and buttons</li><li>Enhanced styling for data grid and tree views</li></ul><p>Users can enable the dark theme through <strong>Menu -&gt; Options -&gt; Change Theme</strong>.</p><span id="more"></span><h2><span id="bug-fixes">Bug Fixes</span></h2><h3><span id="fixed-mongodb-server-help-documentation">Fixed MongoDB Server Help Documentation</span></h3><p>Resolved an issue where NoSQLBooster would attempt to load version-specific help documentation based on the connected MongoDB server version. For MongoDB versions below 4.4, the official online help documentation is no longer available. NoSQLBooster now falls back to using MongoDB 4.4 documentation for these older versions to ensure users can still access relevant command help information.</p><h3><span id="fixed-field-display-bug-in-index-creation-dialog">Fixed Field Display Bug in Index Creation Dialog</span></h3><p>Resolved an issue where adding fields in the index creation dialog would display &quot;[Object object]&quot; instead of properly showing the field name. The dialog now correctly displays all added fields with their proper formatting.</p><h3><span id="fixed-field-display-bug-in-export-dialog">Fixed Field Display Bug in Export Dialog</span></h3><p>Fixed a bug in the export dialog where adding new fields would show &quot;[Object object]&quot; instead of the field name. Field selection now displays correctly across all export formats.</p><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-1011">Version 10.1.1</span></h2><ul><li>Added, Add enableUtf8Validation option to advanced url options (more tab)</li><li>Fixed,  No fields for Username&#x2F;Password in Connection Editor -&gt; Authentication -&gt; Basic <a href="https://github.com/nosqlbooster/feedback/issues/24">Issue #24</a></li><li>Fixed, Unable to Create Connection Manually, when there are no existing Connections <a href="https://github.com/nosqlbooster/feedback/issues/25#issuecomment-3693294898">Issue #25</a></li><li>Fixed, Fully display the error details of BulkWriteError</li></ul><h2><span id="version-1012">Version 10.1.2</span></h2><ul><li>Fixed, an infinite UI update loop bug when explaining specific aggregate statements <a href="https://github.com/nosqlbooster/feedback/issues/26">Issue #26</a></li><li>Fixed, spelling errors in UI tooltip messages</li><li>Fixed, unable to open the UI configuration dialog under options when the AI Chat window is collapsed</li><li>Fixed, mongosh fails to open in the Object Explorer when compression is enabled in connection options</li></ul><h2><span id="version-1013">Version 10.1.3</span></h2><ul><li>Fixed, filter analysis and send script to main window not working in Schema Analyzer</li><li>Fixed, error in Grid&#x2F;Tree view when _id is a Legacy GUID</li></ul><h2><span id="version-1014">Version 10.1.4</span></h2><ul><li>Added, replace mode to the UI of the Table&#x2F;Tree view and Document Viewer. When updating a document, in addition to using updateOne, you can now also use replaceOne to overwrite the currently edited document.</li><li>Fixed, a display bug where a large team license would incorrectly show as a trial license in the Main Menu -&gt; Help.&quot;</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB/">MongoDB</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/AI/">AI</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Custom-Model/">Custom Model</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Dark-Theme/">Dark Theme</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-10-1/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 10.0 Released! AI Helper, Natural Language Query, Code Translation, Script Explanation</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-10/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-10/</guid>
      <pubDate>Wed, 01 Oct 2025 03:15:00 GMT</pubDate>
      
      <description>&lt;p&gt;We are pleased to announce the release of NoSQLBooster 10.0. This new version introduces &lt;strong&gt;AI Helper&lt;/strong&gt;, a feature designed to enhance how developers work with MongoDB. With AI Helper, NoSQLBooster now supports natural language queries, cross-language code translation, and step-by-step script explanations - features that aim to make MongoDB development more intuitive and efficient.&lt;/p&gt;
&lt;p&gt;If you want to try NoSQLBooster 10.0 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 10.0 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Advanced AI features including auto-running generated scripts in IDE, code translation, and script explanation are exclusively available for Active Software Assurance users. Please check &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;feature matrix&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 10.0 with the new AI Helper panel.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v10-main.png&quot; alt=&quot;Main interface with AI Helper&quot;&gt; &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s dive in and get an overview of what&amp;#39;s coming in NoSQLBooster 10.0!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h1 id=&quot;What-s-new&quot;&gt;&lt;a href=&quot;#What-s-new&quot; class=&quot;headerlink&quot; title=&quot;What&amp;#39;s new?&quot;&gt;&lt;/a&gt;What&amp;#39;s new?&lt;/h1&gt;&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ai-helper&quot;&gt;AI Helper&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#1-natural-language-queries&quot;&gt;1. Natural Language Queries&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#schema-aware-ai-queries&quot;&gt;Schema-Aware AI Queries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#auto-run-query-statements&quot;&gt;Auto-run query statements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-cross-language-code-translation&quot;&gt;2. Cross-Language Code Translation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-step-by-step-script-explanation&quot;&gt;3. Step-by-Step Script Explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#compatibility-and-requirements&quot;&gt;Compatibility and Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#oidc-authentication&quot;&gt;OIDC Authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#patch-releases&quot;&gt;Patch Releases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-1001&quot;&gt;Version 10.0.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1002&quot;&gt;Version 10.0.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1003&quot;&gt;Version 10.0.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1004&quot;&gt;Version 10.0.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1005&quot;&gt;Version 10.0.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1006&quot;&gt;Version 10.0.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1007&quot;&gt;Version 10.0.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-1008&quot;&gt;Version 10.0.8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h2 id=&quot;AI-Helper&quot;&gt;&lt;a href=&quot;#AI-Helper&quot; class=&quot;headerlink&quot; title=&quot;AI Helper&quot;&gt;&lt;/a&gt;AI Helper&lt;/h2&gt;&lt;p&gt;NoSQLBooster 10.0 introduces AI Helper, a new integrated component that enhances MongoDB development workflows. The AI Helper is fully built-in and requires no configuration from users - it works out of the box with no external API keys or setup required. This tool provides three main capabilities to improve database operations:&lt;/p&gt;
&lt;h3 id=&quot;1-Natural-Language-Queries&quot;&gt;&lt;a href=&quot;#1-Natural-Language-Queries&quot; class=&quot;headerlink&quot; title=&quot;1. Natural Language Queries&quot;&gt;&lt;/a&gt;1. Natural Language Queries&lt;/h3&gt;&lt;p&gt;With the power of generative AI, users can now describe their query requirements in natural language, and AI Helper automatically converts these descriptions into standard MongoDB query syntax.&lt;/p&gt;
&lt;p&gt;For example, a user might enter:&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;Find movies directed by Christopher Nolan and released after 2005&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;And AI Helper generates the corresponding MongoDB query:&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;use mflix;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;movies&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;director&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;Christopher Nolan&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;year&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$gt&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;2005&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/v10-natural-language-query.png&quot; alt=&quot;Natural Language Query&quot;&gt;&lt;/p&gt;
&lt;p&gt;This feature dramatically reduces the learning curve for MongoDB query syntax, making database operations accessible to developers of all skill levels. The generated find queries can be further refined using NoSQLBooster&amp;#39;s existing Visual Query Builder.&lt;/p&gt;
&lt;h4 id=&quot;Schema-Aware-AI-Queries&quot;&gt;&lt;a href=&quot;#Schema-Aware-AI-Queries&quot; class=&quot;headerlink&quot; title=&quot;Schema-Aware AI Queries&quot;&gt;&lt;/a&gt;Schema-Aware AI Queries&lt;/h4&gt;&lt;p&gt;A standout capability of NoSQLBooster 10.0&amp;#39;s AI Helper is its ability to selectively send database schema information to the AI model, significantly enhancing query generation quality. Users can configure exactly what schema information to include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Database names&lt;/li&gt;
&lt;li&gt;Collection names&lt;/li&gt;
&lt;li&gt;Field names and data types&lt;/li&gt;
&lt;li&gt;Index information&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By providing this contextual information to the AI, NoSQLBooster generates more accurate, efficient, and schema-compliant queries. This is especially valuable for complex databases where understanding field types and indexes is crucial for performance.&lt;/p&gt;
&lt;h4 id=&quot;Auto-run-query-statements&quot;&gt;&lt;a href=&quot;#Auto-run-query-statements&quot; class=&quot;headerlink&quot; title=&quot;Auto-run query statements&quot;&gt;&lt;/a&gt;Auto-run query statements&lt;/h4&gt;&lt;p&gt;When enabled, read-only mongosh queries will be automatically executed and the results will be displayed in the result window.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v10-autorun-queries.png&quot; alt=&quot;Auto run queries&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-Cross-Language-Code-Translation&quot;&gt;&lt;a href=&quot;#2-Cross-Language-Code-Translation&quot; class=&quot;headerlink&quot; title=&quot;2. Cross-Language Code Translation&quot;&gt;&lt;/a&gt;2. Cross-Language Code Translation&lt;/h3&gt;&lt;p&gt;AI Helper can translate MongoDB Shell scripts (mongosh) into equivalent code for multiple programming languages, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Node.js (Mongoose)&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Python (Motor)&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Java (Reactive Streams)&lt;/li&gt;
&lt;li&gt;C# &amp;#x2F; .NET&lt;/li&gt;
&lt;li&gt;C# (LINQ Syntax)&lt;/li&gt;
&lt;li&gt;Kotlin&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Ruby&lt;/li&gt;
&lt;li&gt;C&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Golang&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Kotlin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This feature is particularly valuable for full-stack development teams working with different technologies. For example, a complex aggregation pipeline written in the MongoDB shell can be instantly translated to Python:&lt;/p&gt;
&lt;p&gt;Original MongoDB Shell:&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;use mflix&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;movies&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;director&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;Christopher Nolan&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;year&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$gt&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;2005&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;AI-generated Python equivalent:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v10-code-translation.png&quot; alt=&quot;Code Translation&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-Step-by-Step-Script-Explanation&quot;&gt;&lt;a href=&quot;#3-Step-by-Step-Script-Explanation&quot; class=&quot;headerlink&quot; title=&quot;3. Step-by-Step Script Explanation&quot;&gt;&lt;/a&gt;3. Step-by-Step Script Explanation&lt;/h3&gt;&lt;p&gt;For complex MongoDB scripts, AI Helper can generate detailed step-by-step explanations that help developers understand query logic and improve performance.&lt;/p&gt;
&lt;p&gt;For example, given a complex query:&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;users&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;age&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$gt&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;30&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;$or&lt;/span&gt;: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123; &lt;span class=&quot;attr&quot;&gt;role&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;admin&amp;quot;&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123; &lt;span class=&quot;attr&quot;&gt;status&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;active&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;lastLogin&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$gte&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;ISODate&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2025-03-01&amp;quot;&lt;/span&gt;) &amp;#125; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;location&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$geoWithin&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$centerSphere&lt;/span&gt;: [ [ -&lt;span class=&quot;number&quot;&gt;73.93&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;40.73&lt;/span&gt; ], &lt;span class=&quot;number&quot;&gt;10&lt;/span&gt; / &lt;span class=&quot;number&quot;&gt;3963.2&lt;/span&gt; ] &amp;#125; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;).&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&amp;#123; &lt;span class=&quot;attr&quot;&gt;lastLogin&lt;/span&gt;: -&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; &amp;#125;).&lt;span class=&quot;title function_&quot;&gt;limit&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;50&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;AI Helper provides a clear explanation:&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;This query performs the following operations:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;1. Searches the &amp;quot;users&amp;quot; collection for documents where:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   - The &amp;quot;age&amp;quot; field is greater than 30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   - AND one of the following conditions is true:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     a. The &amp;quot;role&amp;quot; field equals &amp;quot;admin&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     b. The &amp;quot;status&amp;quot; field equals &amp;quot;active&amp;quot; AND the &amp;quot;lastLogin&amp;quot; field is greater than or equal to March 1, 2025&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2. Additionally, the document&amp;#x27;s &amp;quot;location&amp;quot; field must be within 10 miles of the geographic coordinates [-73.93, 40.73] (near New York City)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3. Results are sorted by &amp;quot;lastLogin&amp;quot; field in descending order (most recent first)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4. Only the first 50 matching documents are returned&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;PERFORMANCE CONSIDERATIONS:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- For optimal performance, ensure you have indexes on &amp;quot;age&amp;quot;, &amp;quot;role&amp;quot;, &amp;quot;status&amp;quot;, &amp;quot;lastLogin&amp;quot;, and a geospatial index on &amp;quot;location&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- The $or operator may prevent the use of some indexes; consider monitoring query performance&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;This feature is especially valuable for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Onboarding new team members&lt;/li&gt;
&lt;li&gt;Reviewing and understanding legacy code&lt;/li&gt;
&lt;li&gt;Optimizing queries for better performance&lt;/li&gt;
&lt;li&gt;Documenting complex database operations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v10-script-explanation.png&quot; alt=&quot;Script Explanation&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Compatibility-and-Requirements&quot;&gt;&lt;a href=&quot;#Compatibility-and-Requirements&quot; class=&quot;headerlink&quot; title=&quot;Compatibility and Requirements&quot;&gt;&lt;/a&gt;Compatibility and Requirements&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Compatible with MongoDB 3.6 through 8.0&lt;/li&gt;
&lt;li&gt;Supported on Windows, macOS, and Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;OIDC-Authentication&quot;&gt;&lt;a href=&quot;#OIDC-Authentication&quot; class=&quot;headerlink&quot; title=&quot;OIDC Authentication&quot;&gt;&lt;/a&gt;OIDC Authentication&lt;/h2&gt;&lt;p&gt;NoSQLBooster 10.0 supports MongoDB OIDC authentication, an authentication method that allows users to log in to MongoDB Enterprise server or MongoDB Atlas using their organization&amp;#39;s OIDC provider. This feature is particularly useful for teams that use OIDC for authentication and authorization.&lt;/p&gt;
&lt;p&gt;About MongoDB OIDC Authentication, please refer to the &lt;a href=&quot;https://www.mongodb.com/docs/manual/core/oidc/security-oidc&quot;&gt;official MongoDB documentation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v10-oidc-auth-options.png&quot; alt=&quot;OIDC Authentication Options&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Patch-Releases&quot;&gt;&lt;a href=&quot;#Patch-Releases&quot; class=&quot;headerlink&quot; title=&quot;Patch Releases&quot;&gt;&lt;/a&gt;Patch Releases&lt;/h1&gt;&lt;h2 id=&quot;Version-10-0-1&quot;&gt;&lt;a href=&quot;#Version-10-0-1&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.1&quot;&gt;&lt;/a&gt;Version 10.0.1&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a bug that prevented the app from closing normally on macOS sonoma.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-2&quot;&gt;&lt;a href=&quot;#Version-10-0-2&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.2&quot;&gt;&lt;/a&gt;Version 10.0.2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added, support MongoDB oidc authentication.&lt;/li&gt;
&lt;li&gt;Improved, after tabsize is changed, indentsize should be changed in the same step.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-3&quot;&gt;&lt;a href=&quot;#Version-10-0-3&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.3&quot;&gt;&lt;/a&gt;Version 10.0.3&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed, a bug when double clicking the element in the tree, and this element is the first in the document (or in the contained document) - The view is automatically scrolled down . &lt;/li&gt;
&lt;li&gt;Improved, add &amp;quot;0s no timeout&amp;quot; operation timeout option for &amp;quot;RS Member&amp;quot; switcher in the script editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-4&quot;&gt;&lt;a href=&quot;#Version-10-0-4&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.4&quot;&gt;&lt;/a&gt;Version 10.0.4&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed, an [Object object] display bug when using the prompt input dialog in the database selector.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-5&quot;&gt;&lt;a href=&quot;#Version-10-0-5&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.5&quot;&gt;&lt;/a&gt;Version 10.0.5&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed, Restore the default  &amp;quot;find&amp;quot; snippet (code template) to v9.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.%%collection%%.find(&amp;#123;$1&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .projection(&amp;#123;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .sort(&amp;#123;_id: -1&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .limit(%%limit%%)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;fixed, a AWS SSO authentication &amp;quot;module not found&amp;quot; bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-6&quot;&gt;&lt;a href=&quot;#Version-10-0-6&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.6&quot;&gt;&lt;/a&gt;Version 10.0.6&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, the function to disconnect all connections does not work.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-7&quot;&gt;&lt;a href=&quot;#Version-10-0-7&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.7&quot;&gt;&lt;/a&gt;Version 10.0.7&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed: Added protective code when retrieving field and index information.&lt;/li&gt;
&lt;li&gt;Fixed: Table view- sorting errors that occurred when copying multiple rows of data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-10-0-8&quot;&gt;&lt;a href=&quot;#Version-10-0-8&quot; class=&quot;headerlink&quot; title=&quot;Version 10.0.8&quot;&gt;&lt;/a&gt;Version 10.0.8&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed: Added a workaround solution for the issue where Electron-based apps cause significant system-wide lag on macOS 26 Tahoe.&lt;/li&gt;
&lt;/ul&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We are pleased to announce the release of NoSQLBooster 10.0. This new version introduces <strong>AI Helper</strong>, a feature designed to enhance how developers work with MongoDB. With AI Helper, NoSQLBooster now supports natural language queries, cross-language code translation, and step-by-step script explanations - features that aim to make MongoDB development more intuitive and efficient.</p><p>If you want to try NoSQLBooster 10.0 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 10.0 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p><strong>Note:</strong> Advanced AI features including auto-running generated scripts in IDE, code translation, and script explanation are exclusively available for Active Software Assurance users. Please check <a href="https://nosqlbooster.com/compareEditions">feature matrix</a> for more information.</p><p>The following figure shows the main interface of version 10.0 with the new AI Helper panel.</p><p><img src="/blog/img/v10-main.png" alt="Main interface with AI Helper"> </p><p>Let&#39;s dive in and get an overview of what&#39;s coming in NoSQLBooster 10.0!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#ai-helper">AI Helper</a><ul><li><a href="#1-natural-language-queries">1. Natural Language Queries</a><ul><li><a href="#schema-aware-ai-queries">Schema-Aware AI Queries</a></li><li><a href="#auto-run-query-statements">Auto-run query statements</a></li></ul></li><li><a href="#2-cross-language-code-translation">2. Cross-Language Code Translation</a></li><li><a href="#3-step-by-step-script-explanation">3. Step-by-Step Script Explanation</a></li></ul></li><li><a href="#compatibility-and-requirements">Compatibility and Requirements</a></li><li><a href="#oidc-authentication">OIDC Authentication</a></li></ul><ul><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-1001">Version 10.0.1</a></li><li><a href="#version-1002">Version 10.0.2</a></li><li><a href="#version-1003">Version 10.0.3</a></li><li><a href="#version-1004">Version 10.0.4</a></li><li><a href="#version-1005">Version 10.0.5</a></li><li><a href="#version-1006">Version 10.0.6</a></li><li><a href="#version-1007">Version 10.0.7</a></li><li><a href="#version-1008">Version 10.0.8</a></li></ul></li></ul><!-- tocstop --><h2><span id="ai-helper">AI Helper</span></h2><p>NoSQLBooster 10.0 introduces AI Helper, a new integrated component that enhances MongoDB development workflows. The AI Helper is fully built-in and requires no configuration from users - it works out of the box with no external API keys or setup required. This tool provides three main capabilities to improve database operations:</p><h3><span id="1-natural-language-queries">1. Natural Language Queries</span></h3><p>With the power of generative AI, users can now describe their query requirements in natural language, and AI Helper automatically converts these descriptions into standard MongoDB query syntax.</p><p>For example, a user might enter:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Find movies directed by Christopher Nolan and released after 2005</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>And AI Helper generates the corresponding MongoDB query:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">use mflix;</span><br><span class="line">db.<span class="property">movies</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">    <span class="attr">director</span>: <span class="string">&quot;Christopher Nolan&quot;</span>,</span><br><span class="line">    <span class="attr">year</span>: &#123; <span class="attr">$gt</span>: <span class="number">2005</span> &#125;</span><br><span class="line">&#125;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><img src="/blog/img/v10-natural-language-query.png" alt="Natural Language Query"></p><p>This feature dramatically reduces the learning curve for MongoDB query syntax, making database operations accessible to developers of all skill levels. The generated find queries can be further refined using NoSQLBooster&#39;s existing Visual Query Builder.</p><h4><span id="schema-aware-ai-queries">Schema-Aware AI Queries</span></h4><p>A standout capability of NoSQLBooster 10.0&#39;s AI Helper is its ability to selectively send database schema information to the AI model, significantly enhancing query generation quality. Users can configure exactly what schema information to include:</p><ul><li>Database names</li><li>Collection names</li><li>Field names and data types</li><li>Index information</li></ul><p>By providing this contextual information to the AI, NoSQLBooster generates more accurate, efficient, and schema-compliant queries. This is especially valuable for complex databases where understanding field types and indexes is crucial for performance.</p><h4><span id="auto-run-query-statements">Auto-run query statements</span></h4><p>When enabled, read-only mongosh queries will be automatically executed and the results will be displayed in the result window.</p><p><img src="/blog/img/v10-autorun-queries.png" alt="Auto run queries"></p><h3><span id="2-cross-language-code-translation">2. Cross-Language Code Translation</span></h3><p>AI Helper can translate MongoDB Shell scripts (mongosh) into equivalent code for multiple programming languages, including:</p><ul><li>Node.js</li><li>Node.js (Mongoose)</li><li>Python</li><li>Python (Motor)</li><li>Java</li><li>Java (Reactive Streams)</li><li>C# &#x2F; .NET</li><li>C# (LINQ Syntax)</li><li>Kotlin</li><li>PHP</li><li>Ruby</li><li>C</li><li>C++</li><li>Golang</li><li>Rust</li><li>Kotlin</li></ul><p>This feature is particularly valuable for full-stack development teams working with different technologies. For example, a complex aggregation pipeline written in the MongoDB shell can be instantly translated to Python:</p><p>Original MongoDB Shell:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">use mflix</span><br><span class="line">db.<span class="property">movies</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="attr">director</span>: <span class="string">&quot;Christopher Nolan&quot;</span>,</span><br><span class="line">  <span class="attr">year</span>: &#123; <span class="attr">$gt</span>: <span class="number">2005</span> &#125;</span><br><span class="line">&#125;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>AI-generated Python equivalent:</p><p><img src="/blog/img/v10-code-translation.png" alt="Code Translation"></p><h3><span id="3-step-by-step-script-explanation">3. Step-by-Step Script Explanation</span></h3><p>For complex MongoDB scripts, AI Helper can generate detailed step-by-step explanations that help developers understand query logic and improve performance.</p><p>For example, given a complex query:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">users</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="attr">age</span>: &#123; <span class="attr">$gt</span>: <span class="number">30</span> &#125;,</span><br><span class="line">  <span class="attr">$or</span>: [</span><br><span class="line">    &#123; <span class="attr">role</span>: <span class="string">&quot;admin&quot;</span> &#125;,</span><br><span class="line">    &#123; <span class="attr">status</span>: <span class="string">&quot;active&quot;</span>, <span class="attr">lastLogin</span>: &#123; <span class="attr">$gte</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2025-03-01&quot;</span>) &#125; &#125;</span><br><span class="line">  ],</span><br><span class="line">  <span class="attr">location</span>: &#123; <span class="attr">$geoWithin</span>: &#123; <span class="attr">$centerSphere</span>: [ [ -<span class="number">73.93</span>, <span class="number">40.73</span> ], <span class="number">10</span> / <span class="number">3963.2</span> ] &#125; &#125;</span><br><span class="line">&#125;).<span class="title function_">sort</span>(&#123; <span class="attr">lastLogin</span>: -<span class="number">1</span> &#125;).<span class="title function_">limit</span>(<span class="number">50</span>)</span><br></pre></td></tr></table></figure><p>AI Helper provides a clear explanation:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">This query performs the following operations:</span><br><span class="line"></span><br><span class="line">1. Searches the &quot;users&quot; collection for documents where:</span><br><span class="line">   - The &quot;age&quot; field is greater than 30</span><br><span class="line">   - AND one of the following conditions is true:</span><br><span class="line">     a. The &quot;role&quot; field equals &quot;admin&quot;</span><br><span class="line">     b. The &quot;status&quot; field equals &quot;active&quot; AND the &quot;lastLogin&quot; field is greater than or equal to March 1, 2025</span><br><span class="line"></span><br><span class="line">2. Additionally, the document&#x27;s &quot;location&quot; field must be within 10 miles of the geographic coordinates [-73.93, 40.73] (near New York City)</span><br><span class="line"></span><br><span class="line">3. Results are sorted by &quot;lastLogin&quot; field in descending order (most recent first)</span><br><span class="line"></span><br><span class="line">4. Only the first 50 matching documents are returned</span><br><span class="line"></span><br><span class="line">PERFORMANCE CONSIDERATIONS:</span><br><span class="line">- For optimal performance, ensure you have indexes on &quot;age&quot;, &quot;role&quot;, &quot;status&quot;, &quot;lastLogin&quot;, and a geospatial index on &quot;location&quot;</span><br><span class="line">- The $or operator may prevent the use of some indexes; consider monitoring query performance</span><br></pre></td></tr></table></figure><p>This feature is especially valuable for:</p><ul><li>Onboarding new team members</li><li>Reviewing and understanding legacy code</li><li>Optimizing queries for better performance</li><li>Documenting complex database operations</li></ul><p><img src="/blog/img/v10-script-explanation.png" alt="Script Explanation"></p><h2><span id="compatibility-and-requirements">Compatibility and Requirements</span></h2><ul><li>Compatible with MongoDB 3.6 through 8.0</li><li>Supported on Windows, macOS, and Linux</li></ul><h2><span id="oidc-authentication">OIDC Authentication</span></h2><p>NoSQLBooster 10.0 supports MongoDB OIDC authentication, an authentication method that allows users to log in to MongoDB Enterprise server or MongoDB Atlas using their organization&#39;s OIDC provider. This feature is particularly useful for teams that use OIDC for authentication and authorization.</p><p>About MongoDB OIDC Authentication, please refer to the <a href="https://www.mongodb.com/docs/manual/core/oidc/security-oidc">official MongoDB documentation</a> for more information.</p><p><img src="/blog/img/v10-oidc-auth-options.png" alt="OIDC Authentication Options"></p><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-1001">Version 10.0.1</span></h2><ul><li>Fixed, a bug that prevented the app from closing normally on macOS sonoma.</li></ul><h2><span id="version-1002">Version 10.0.2</span></h2><ul><li>Added, support MongoDB oidc authentication.</li><li>Improved, after tabsize is changed, indentsize should be changed in the same step.</li></ul><h2><span id="version-1003">Version 10.0.3</span></h2><ul><li>fixed, a bug when double clicking the element in the tree, and this element is the first in the document (or in the contained document) - The view is automatically scrolled down . </li><li>Improved, add &quot;0s no timeout&quot; operation timeout option for &quot;RS Member&quot; switcher in the script editor.</li></ul><h2><span id="version-1004">Version 10.0.4</span></h2><ul><li>fixed, an [Object object] display bug when using the prompt input dialog in the database selector.</li></ul><h2><span id="version-1005">Version 10.0.5</span></h2><ul><li>fixed, Restore the default  &quot;find&quot; snippet (code template) to v9.</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">db.%%collection%%.find(&#123;$1&#125;)</span><br><span class="line">    .projection(&#123;&#125;)</span><br><span class="line">    .sort(&#123;_id: -1&#125;)</span><br><span class="line">    .limit(%%limit%%)</span><br></pre></td></tr></table></figure><ul><li>fixed, a AWS SSO authentication &quot;module not found&quot; bug.</li></ul><h2><span id="version-1006">Version 10.0.6</span></h2><ul><li>Fixed, the function to disconnect all connections does not work.</li></ul><h2><span id="version-1007">Version 10.0.7</span></h2><ul><li>Fixed: Added protective code when retrieving field and index information.</li><li>Fixed: Table view- sorting errors that occurred when copying multiple rows of data.</li></ul><h2><span id="version-1008">Version 10.0.8</span></h2><ul><li>Fixed: Added a workaround solution for the issue where Electron-based apps cause significant system-wide lag on macOS 26 Tahoe.</li></ul><span id="more"></span>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB/">MongoDB</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/AI/">AI</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Natural-Language-Query/">Natural Language Query</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Code-Translation/">Code Translation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Script-Explanation/">Script Explanation</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-10/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 9.1 Released! official support for MongoDB 8.0</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-91/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-91/</guid>
      <pubDate>Fri, 24 Jan 2025 11:15:00 GMT</pubDate>
      
        
        
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 9.1 today. This version includes official support for MongoDB 8.0. For more inform</description>
        
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 9.1 today. This version includes official support for MongoDB 8.0. For more information on MongoDB Server 8.0 , see <a href="https://docs.mongodb.com/manual/release-notes/8.0/">Release Notes for MongoDB 8.0</a>.</p><!-- toc --><ul><li><a href="#mongodb-80-support">MongoDB 8.0 support</a><ul><li><a href="#new-aggregation-operators">New Aggregation Operators</a></li><li><a href="#new-mongodb-80-mongosh-methods">New MongoDB 8.0 mongosh Methods</a></li><li><a href="#new-mongodb-80-aggregation-stages">New MongoDB 8.0 Aggregation Stages.</a></li></ul></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-911">Version 9.1.1</a></li><li><a href="#version-912">Version 9.1.2</a></li><li><a href="#version-913">Version 9.1.3</a></li><li><a href="#version-914">Version 9.1.4</a></li><li><a href="#version-915">Version 9.1.5</a></li><li><a href="#version-916">Version 9.1.6</a></li></ul></li></ul><!-- tocstop --><h1><span id="mongodb-80-support">MongoDB 8.0 support</span></h1><p>NoSQLBooster for MongoDB 8.1 added support for all the new mongosh methods, aggregation stages and operators of MongoDB 7.1-8.0. Aggregation Pipeline (db.xxx.aggregate().xxxx()) and Operator helper ($.) also add these helper methods.</p><h2><span id="new-aggregation-operators">New Aggregation Operators</span></h2><p>MongoDB 8.0 introduces the following aggregation operators:</p><table><thead><tr><th>Name</th><th>Description</th><th>NoSQLBooster Helper method</th></tr></thead><tbody><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/toUUID">$toUUID</a></td><td>Converts a string value to a UUID. If the input value is not a string, $toUUID errors.</td><td><code>$.toUUID()</code></td></tr></tbody></table><h2><span id="new-mongodb-80-mongosh-methods">New MongoDB 8.0 mongosh Methods</span></h2><table><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/sh.abortMoveCollection/#mongodb-method-sh.abortMoveCollection">sh.abortMoveCollection()</a></td><td>Stops an in-progress moveCollection operation.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/sh.abortUnshardCollection/#mongodb-method-sh.abortUnshardCollection">sh.abortUnshardCollection()</a></td><td>Stops an in-progress unshardCollection operation.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/sh.moveCollection/#mongodb-method-sh.moveCollection">sh.moveCollection()</a></td><td>Moves a single unsharded collection to a different shard. Run sh.moveCollection() with a mongos instance while using the admin database.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/sh.shardAndDistributeCollection/#mongodb-method-sh.shardAndDistributeCollection">sh.shardAndDistributeCollection()</a></td><td>Shards a collection and immediately redistributes the data using the provided shard key.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/sh.unshardCollection/#mongodb-method-sh.unshardCollection">sh.unshardCollection()</a></td><td>Unshards an existing sharded collection and moves the collection data onto a single shard.</td></tr></tbody></table><h2><span id="new-mongodb-80-aggregation-stages">New MongoDB 8.0 Aggregation Stages.</span></h2><table><thead><tr><th>Name</th><th>Description</th><th>NoSQLBooster Helper Method</th></tr></thead><tbody><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/queryStats/#mongodb-pipeline-pipe.-queryStats">$queryStats</a></td><td>Returns runtime statistics for recorded queries.</td><td><code>db.coll.aggregate().queryStats(&#123;&#125;)</code></td></tr></tbody></table><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-911">Version 9.1.1</span></h2><ul><li>Fixed, an operation timeout issue when exporting large collection to Excel with one click.</li><li>Improved, add a progress bar to show the progress of the operation when exporting collection to Excel.</li><li>Improved, add guard code when getting user&#39;s &quot;My Documents&quot; path fails.</li></ul><h2><span id="version-912">Version 9.1.2</span></h2><ul><li>Fixed, SSH tunnel does not work with some encrypted private Keys.</li><li>Fixed, a bug where the line numbers of history scripts were not displayed in the drop-down menu items</li></ul><h2><span id="version-913">Version 9.1.3</span></h2><ul><li>Fixed, a bug where heap out of memory occurred when exporting large record set to XSLX files.</li><li>Improved, significantly improved efficiency in exporting query result sets to XSLX, TXT and HTML files</li></ul><h2><span id="version-914">Version 9.1.4</span></h2><ul><li>Fixed, a bug that reported &quot;TypeError: Cannot read property &#39;read&#39; of undefined&quot; when opening mongostat GUI with MongoDB server 8.0.4.</li></ul><h2><span id="version-915">Version 9.1.5</span></h2><ul><li>Fixed, a MongoMissingDependencyError when use compressors zstp and snappy in the connection.</li><li>Fixed, Ctrl-tab should cycle through collections tabs in most recently used order, reordering the list to place the most recently used tab on top.</li></ul><h2><span id="version-916">Version 9.1.6</span></h2><ul><li>Fixed, a bug with x.509 authentication introduced in version 9.1.5.</li><li>Fixed, a bug where the test connection in the import MongoDB uri dialog always connects to localhost.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB8-0/">MongoDB8.0</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-91/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 9.0 Released!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-90/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-90/</guid>
      <pubDate>Mon, 26 Aug 2024 02:10:01 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we are incredibly pleased to announce the release of NoSQLBooster 9.0. It brings many new features to improve the productivity of MongoDB&amp;#39;ers, CRUD Operations supports EJSON as parameters, send MongoDB commands to multiple replica nodes, in-use encryption connection, split an editor window, greatly improved table view and visual query builder, improved import and export functionality and more. &lt;/p&gt;
&lt;p&gt;If you want to try NoSQLBooster 9.0 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 9.0 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 9.0.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-main.png&quot; alt=&quot;Main interface&quot;&gt; &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s dive in and get an overview of what&amp;#39;s coming in NoSQLBooster 9.0!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h1 id=&quot;What-s-new&quot;&gt;&lt;a href=&quot;#What-s-new&quot; class=&quot;headerlink&quot; title=&quot;What&amp;#39;s new?&quot;&gt;&lt;/a&gt;What&amp;#39;s new?&lt;/h1&gt;&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-commands-supports-ejson-as-parameters&quot;&gt;MongoDB commands supports EJSON as parameters&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#ejson-relaxed-mode&quot;&gt;EJSON Relaxed Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ejson-extended-canonical-format&quot;&gt;EJSON Extended (canonical format)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-shell-bson-functions&quot;&gt;MongoDB Shell BSON Functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#send-mongodb-commands-to-multiple-replica-nodes&quot;&gt;Send MongoDB commands to multiple replica nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#in-use-encryption-connection&quot;&gt;In-use encryption connection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#script-editor-improvements&quot;&gt;Script editor improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#split-an-editor-window&quot;&gt;Split an editor window&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#rename-symbol&quot;&gt;Rename symbol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#change-all-occurrences&quot;&gt;Change all occurrences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#text-transformations&quot;&gt;Text transformations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#no-duplicate-tabs&quot;&gt;No duplicate tabs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#enhanced-data-view&quot;&gt;Enhanced data view&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#field-crud-operations&quot;&gt;Field CRUD Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#document-crud-operations&quot;&gt;Document CRUD Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#non-modal-docobject-viewer&quot;&gt;Non-modal Doc&amp;#x2F;Object Viewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#indicate-query-result-size-avg-size&quot;&gt;Indicate query result size, avg size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tooltips-for-the-objectid&quot;&gt;Tooltips for the ObjectId&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#data-import-and-export&quot;&gt;Data import and export&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#save-collectionquery-as-a-new-collection&quot;&gt;Save collection&amp;#x2F;query as a new collection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#copypaste-to-excel&quot;&gt;Copy&amp;#x2F;Paste to Excel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#export-data-to-the-clipboard&quot;&gt;Export data to the clipboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-connection&quot;&gt;MongoDB Connection&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#backup-connections-regularly&quot;&gt;Backup connections regularly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#import-connections-from-uri-list&quot;&gt;Import connections from URI list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#open-a-connection-in-a-new-window&quot;&gt;Open a connection in a new window&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#database-indexing-related&quot;&gt;Database indexing related&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#suggest-index&quot;&gt;Suggest index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#create-index-from-query&quot;&gt;Create index from query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#monitoring-tools&quot;&gt;Monitoring tools&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#query-profiler-query-code-and-explain-plan&quot;&gt;Query Profiler - Query Code and Explain Plan&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#profiler-switcher&quot;&gt;Profiler switcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#query-code&quot;&gt;Query code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#explain-code&quot;&gt;Explain code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#in-progress-operators-preset-filters&quot;&gt;In-progress Operators - Preset filters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sql-query-improvements&quot;&gt;SQL query improvements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-notable-improvements&quot;&gt;Other Notable Improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#keyboard-shortcuts&quot;&gt;Keyboard Shortcuts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#generate-random-passwords-for-added-users&quot;&gt;Generate random passwords for added users&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#minor-improvements&quot;&gt;Minor improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-901&quot;&gt;Version 9.0.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-902&quot;&gt;Version 9.0.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-903&quot;&gt;Version 9.0.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-905&quot;&gt;Version 9.0.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-906&quot;&gt;Version 9.0.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h1 id=&quot;MongoDB-commands-supports-EJSON-as-parameters&quot;&gt;&lt;a href=&quot;#MongoDB-commands-supports-EJSON-as-parameters&quot; class=&quot;headerlink&quot; title=&quot;MongoDB commands supports EJSON as parameters&quot;&gt;&lt;/a&gt;MongoDB commands supports EJSON as parameters&lt;/h1&gt;&lt;p&gt;The Extended JSON format defines a reserved set of keys prefixed with &amp;quot;$&amp;quot; to represent field type information that directly corresponds to each type in BSON, the format that MongoDB uses to store data. The MongoDB shell usually uses JavaScript functions to represent MongoDB BSON types. The mongosh&amp;#39;s CRUD methods can only use javascript BSON functions as parameters, and do not support EJSON formats, which requires conversion in order to use EJSON in queries. In V9, we have extended the mongosh shell methods to directly support EJSON as method parameters. Both canonical and relaxed formats are supported.&lt;/p&gt;
&lt;p&gt;The following three queries are equivalent and can be used directly in V9.&lt;/p&gt;
&lt;h3 id=&quot;EJSON-Relaxed-Mode&quot;&gt;&lt;a href=&quot;#EJSON-Relaxed-Mode&quot; class=&quot;headerlink&quot; title=&quot;EJSON Relaxed Mode&quot;&gt;&lt;/a&gt;EJSON Relaxed Mode&lt;/h3&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;collection&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;_id&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;$oid&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;6368556b5dfec6090e3e4b6a&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;int32&amp;quot;&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;63480&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;int64&amp;quot;&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;4127753986432186&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;double&amp;quot;&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;33.99535545410777&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;date&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;$date&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;2021-11-19T03:16:06.652Z&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&quot;EJSON-Extended-canonical-format&quot;&gt;&lt;a href=&quot;#EJSON-Extended-canonical-format&quot; class=&quot;headerlink&quot; title=&quot;EJSON Extended (canonical format)&quot;&gt;&lt;/a&gt;EJSON Extended (canonical format)&lt;/h3&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;collection&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;_id&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;$oid&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;6368556b5dfec6090e3e4b6a&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;int32&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;$numberInt&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;63480&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;int64&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;$numberLong&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;4127753986432186&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;double&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;$numberDouble&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;33.99535545410777&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;date&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&amp;quot;$date&amp;quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;$numberLong&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;1637291766652&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&quot;MongoDB-Shell-BSON-Functions&quot;&gt;&lt;a href=&quot;#MongoDB-Shell-BSON-Functions&quot; class=&quot;headerlink&quot; title=&quot;MongoDB Shell BSON Functions&quot;&gt;&lt;/a&gt;MongoDB Shell BSON Functions&lt;/h3&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;collection&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;oid&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;ObjectId&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;6368556b5dfec6090e3e4b6a&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;int32&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;63480&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;int64&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;NumberLong&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;4127753986432186&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;double&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;Double&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;33.99535545410777&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;date&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;ISODate&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2021-11-19T11:16:06.652+08:00&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;We also added two editor commands for interchanging EJSON and mongo shell methods.&lt;br&gt;Press &lt;code&gt;Command+Shift+P&lt;/code&gt; to open command palette and enter &amp;quot;EJSON&amp;quot;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Editor: Convert EJSON to mongosh Javascript Object&lt;/li&gt;
&lt;li&gt;Editor: Convert mongosh Javascript Object to EJSON&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;Send-MongoDB-commands-to-multiple-replica-nodes&quot;&gt;&lt;a href=&quot;#Send-MongoDB-commands-to-multiple-replica-nodes&quot; class=&quot;headerlink&quot; title=&quot;Send MongoDB commands to multiple replica nodes&quot;&gt;&lt;/a&gt;Send MongoDB commands to multiple replica nodes&lt;/h1&gt;&lt;p&gt;The replica member switcher now allows you to select multiple&amp;#x2F;all replica set nodes and send Mongo Shell commands to those nodes at the same time. The following example allows you to quickly view version information for MongoDB instances on all nodes in a replica set.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-rs-member-switcher-version.png&quot; alt=&quot;db.version in all nodes&quot;&gt;&lt;/p&gt;
&lt;p&gt;The commands executed are as follows&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;title function_&quot;&gt;version&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;The result of the execution is aggregated into a JSON document, the member field indicates the node of the replica set, the primary node will add a PRI indication, if the node has a tag it will also be shown additionally,&lt;br&gt;The result field is the result of the execution of the command on the node.&lt;/p&gt;
&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;member&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;localhost:28000-PRI&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;result&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;8.0.0-rc8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;member&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;localhost:28001&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;result&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;8.0.0-rc8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;member&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;localhost:28002&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&amp;quot;result&amp;quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;8.0.0-rc8&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;As you can see, the replica set is a primary node and two secondary nodes, all of which have MongoDB version 8.0 rc.&lt;/p&gt;
&lt;h1 id=&quot;In-use-encryption-connection&quot;&gt;&lt;a href=&quot;#In-use-encryption-connection&quot; class=&quot;headerlink&quot; title=&quot;In-use encryption connection&quot;&gt;&lt;/a&gt;In-use encryption connection&lt;/h1&gt;&lt;p&gt;The new In-Use Encryption connection tab allows you to connect your deployments with &lt;a href=&quot;https://www.mongodb.com/docs/v6.0/core/queryable-encryption/&quot;&gt;Queryable Encryption&lt;/a&gt;. Since there are so many options that it would be tedious to set them up one by one using a graphical interface, NoSQLBooster uses javascript objects directly for configuration. &lt;a href=&quot;https://mongodb.github.io/node-mongodb-native/6.5/interfaces/AutoEncryptionOptions.html&quot;&gt;Click here to view auto encryption options&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please noted, In-Use Encryption is an &lt;code&gt;Enterprise/Atlas only&lt;/code&gt; feature.&lt;/p&gt;
&lt;p&gt;For this to work, you need to provide a key vault namespace and the Key Management Service(KMS) provider. Here is a simple example.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-in-use-encryption-tab.png&quot; alt=&quot;In-use encryption tab&quot;&gt;&lt;/p&gt;
&lt;p&gt;When you open a collection containing encrypted fields using the find&amp;#x2F;aggregate statement, the encrypted fields are automatically displayed. You can modify encrypted values and can insert documents and specified fields will be encrypted.&lt;br&gt;When in-use encryption is disabled, you cannot modify encrypted values. NoSQLBooster displays the values of these fields as a series of asterisks and inserted documents can not encrypt fields.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-queryable-encryption.png&quot; alt=&quot;Encrypted Fields&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Script-editor-improvements&quot;&gt;&lt;a href=&quot;#Script-editor-improvements&quot; class=&quot;headerlink&quot; title=&quot;Script editor improvements&quot;&gt;&lt;/a&gt;Script editor improvements&lt;/h1&gt;&lt;h2 id=&quot;Split-an-editor-window&quot;&gt;&lt;a href=&quot;#Split-an-editor-window&quot; class=&quot;headerlink&quot; title=&quot;Split an editor window&quot;&gt;&lt;/a&gt;Split an editor window&lt;/h2&gt;&lt;p&gt;An instance of the editor window can be split into two separate views for easy editing and comparative viewing of query results. &lt;/p&gt;
&lt;p&gt;To split a editor, Click within the editor window to give it focus and click &lt;code&gt;Two Columns Editor Layout&lt;/code&gt; button.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-two-columns-layout-button.png&quot; alt=&quot;Split editor Button&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-two-columns-layout.png&quot; alt=&quot;Two Columns Layout&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Rename-symbol&quot;&gt;&lt;a href=&quot;#Rename-symbol&quot; class=&quot;headerlink&quot; title=&quot;Rename symbol&quot;&gt;&lt;/a&gt;Rename symbol&lt;/h2&gt;&lt;p&gt;Renaming is a common operation associated with refactoring source code, and NoSQLBooster has added the Rename Symbol command (F2). Press &lt;code&gt;F2&lt;/code&gt;, type the desired new name, and press Enter. All instances of symbols in this tab will be renamed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/f2-rename-symbol.png&quot; alt=&quot;Rename Symbol&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Change-all-occurrences&quot;&gt;&lt;a href=&quot;#Change-all-occurrences&quot; class=&quot;headerlink&quot; title=&quot;Change all occurrences&quot;&gt;&lt;/a&gt;Change all occurrences&lt;/h2&gt;&lt;p&gt;Let&amp;#39;s say you&amp;#39;ve selected a word in your code and you want to find all its occurrences in the current file. You can do this by using the new &lt;code&gt;Change All Occurrences&lt;/code&gt; command &lt;code&gt;Ctrl+F2&lt;/code&gt; keyboard shortcut. This will highlight all instances of the selected word, allowing you to edit them simultaneously.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/change-all-occureences.gif&quot; alt=&quot;Change all occurrences&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Text-transformations&quot;&gt;&lt;a href=&quot;#Text-transformations&quot; class=&quot;headerlink&quot; title=&quot;Text transformations&quot;&gt;&lt;/a&gt;Text transformations&lt;/h2&gt;&lt;p&gt;A new group of text transform commands has been added to the Editor Commands palette.&lt;br&gt;For text conversion，select the text you want to convert, press &lt;code&gt;Command+Shift+P&lt;/code&gt; to pop up the command palette, enter the conversion command (e.g. title case), then execute it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transform to camel case&lt;/li&gt;
&lt;li&gt;Transform to kebab case&lt;/li&gt;
&lt;li&gt;Transform to snake case&lt;/li&gt;
&lt;li&gt;Transform to start case&lt;/li&gt;
&lt;li&gt;Transform to words&lt;/li&gt;
&lt;li&gt;Transform to title case&lt;/li&gt;
&lt;li&gt;Encode Base64&lt;/li&gt;
&lt;li&gt;Decode Base64&lt;/li&gt;
&lt;li&gt;Decode MongoDB URI&lt;/li&gt;
&lt;li&gt;Convert EJSON to mongosh Javascript Object&lt;/li&gt;
&lt;li&gt;Convert mongosh Javascript Object to EJSON&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;No-duplicate-tabs&quot;&gt;&lt;a href=&quot;#No-duplicate-tabs&quot; class=&quot;headerlink&quot; title=&quot;No duplicate tabs&quot;&gt;&lt;/a&gt;No duplicate tabs&lt;/h2&gt;&lt;p&gt;Some users complained that there are too many tabs open in NoSQLBooster and it looks a bit messy. In V9, we have enhanced the double-click to open tabs logic appropriately. When you double-click on a collection of open tabs and the &lt;code&gt;find script is unchanged&lt;/code&gt;, do not open a new tab. Just focus on the existing tabs.&lt;/p&gt;
&lt;h1 id=&quot;Enhanced-data-view&quot;&gt;&lt;a href=&quot;#Enhanced-data-view&quot; class=&quot;headerlink&quot; title=&quot;Enhanced data view&quot;&gt;&lt;/a&gt;Enhanced data view&lt;/h1&gt;&lt;h2 id=&quot;Field-CRUD-Operations&quot;&gt;&lt;a href=&quot;#Field-CRUD-Operations&quot; class=&quot;headerlink&quot; title=&quot;Field CRUD Operations&quot;&gt;&lt;/a&gt;Field CRUD Operations&lt;/h2&gt;&lt;p&gt;You can now perform &amp;quot;Add&amp;#x2F;Delete&amp;#x2F;Edit&amp;#x2F;Rename&amp;#x2F;Convert Type&amp;quot; field operations on individual documents, documents returned by a specific query, or all documents in a collection.&lt;/p&gt;
&lt;p&gt;Moving to the Preview Code button displays the code that will be executed, and clicking on it allows you to customize the script.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-right-click-menu-field-operations.png&quot; alt=&quot;Field Right-click Menu&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-field-crud-operations.png&quot; alt=&quot;Field CRUD&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Document-CRUD-Operations&quot;&gt;&lt;a href=&quot;#Document-CRUD-Operations&quot; class=&quot;headerlink&quot; title=&quot;Document CRUD Operations&quot;&gt;&lt;/a&gt;Document CRUD Operations&lt;/h2&gt;&lt;p&gt;You can perform &amp;quot;update&amp;#x2F;remove&amp;quot; documents operations on individual documents, selected documents, documents returned by a specific query, or all documents in a collection.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-document-crud-operations.png&quot; alt=&quot;Document Right-click Menu&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Non-modal-Doc-Object-Viewer&quot;&gt;&lt;a href=&quot;#Non-modal-Doc-Object-Viewer&quot; class=&quot;headerlink&quot; title=&quot;Non-modal Doc&amp;#x2F;Object Viewer&quot;&gt;&lt;/a&gt;Non-modal Doc&amp;#x2F;Object Viewer&lt;/h2&gt;&lt;p&gt;Document&amp;#x2F;Object viewer improved to non-modal window.  The window being active does not prevent the rest of the application from continuing. When the selected objects in the tree&amp;#x2F;table view are changed, the object viewer will be updated synchronously.&lt;/p&gt;
&lt;p&gt;Press &lt;code&gt;Ctrl+I&lt;/code&gt; or double-click _id field to open the document viewer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-non-modal-document-viewer.png&quot; alt=&quot;Non-modal document viewer&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Indicate-query-result-size-avg-size&quot;&gt;&lt;a href=&quot;#Indicate-query-result-size-avg-size&quot; class=&quot;headerlink&quot; title=&quot;Indicate query result size, avg size&quot;&gt;&lt;/a&gt;Indicate query result size, avg size&lt;/h2&gt;&lt;p&gt;Sometimes a query may be (or seem) fast, but have some deeply nested results or individual items containing a large number of embedded items. The V9 added a indicator to show the (average) size of the query&amp;#x2F;aggregate results. This way, developers can get a rough estimate of how much traffic the query will generate and take it into account, e.g. by adding a prediction, limiting the date, or other methods.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/query-result-docs-tooltip.png&quot; alt=&quot;Tooltip for query result&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Tooltips-for-the-ObjectId&quot;&gt;&lt;a href=&quot;#Tooltips-for-the-ObjectId&quot; class=&quot;headerlink&quot; title=&quot;Tooltips for the ObjectId&quot;&gt;&lt;/a&gt;Tooltips for the ObjectId&lt;/h2&gt;&lt;p&gt;Add more information to the tooltip for objectId. It is possible to display the _id as a timestamp via generation_time.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v9-tooltip-objectid.png&quot; alt=&quot;Tooltip for objectId&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Data-import-and-export&quot;&gt;&lt;a href=&quot;#Data-import-and-export&quot; class=&quot;headerlink&quot; title=&quot;Data import and export&quot;&gt;&lt;/a&gt;Data import and export&lt;/h1&gt;&lt;h2 id=&quot;Save-collection-query-as-a-new-collection&quot;&gt;&lt;a href=&quot;#Save-collection-query-as-a-new-collection&quot; class=&quot;headerlink&quot; title=&quot;Save collection&amp;#x2F;query as a new collection&quot;&gt;&lt;/a&gt;Save collection&amp;#x2F;query as a new collection&lt;/h2&gt;&lt;p&gt;The results of the query can now be exported to another collection. If the target collection does not exist, the function invokes the &lt;a href=&quot;https://www.mongodb.com/docs/manual/reference/operator/aggregation/out/&quot;&gt;$out&lt;/a&gt; stage to write to the collection. If the destination collection exists, &lt;a href=&quot;https://www.mongodb.com/docs/manual/reference/operator/aggregation/merge/&quot;&gt;$merge&lt;/a&gt; is used to incorporate results (insert new documents, merge documents, replace documents, keep existing documents, fail the operation, process documents with a custom update pipeline) into the existing collection.&lt;/p&gt;
&lt;p&gt;To access this function, right-click the data grid in the &amp;quot;tree&amp;#x2F;table&amp;quot; view, pop up context menu and click &lt;code&gt;Save This Query as a new MongoDB Collection&lt;/code&gt; menu item.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/save-query-as-new-collection.png&quot; alt=&quot;Save to a new collection&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Copy-Paste-to-Excel&quot;&gt;&lt;a href=&quot;#Copy-Paste-to-Excel&quot; class=&quot;headerlink&quot; title=&quot;Copy&amp;#x2F;Paste to Excel&quot;&gt;&lt;/a&gt;Copy&amp;#x2F;Paste to Excel&lt;/h2&gt;&lt;p&gt;The right-click menu of the data view has been greatly enhanced. In addition to saving the results to a new collection, the copy&amp;#x2F;paste function also adds more options, export to EJSON, export to Excel (csv&amp;#x2F;tsv)...&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/copy-datagrid-to-excel.png&quot; alt=&quot;Copy&amp;#x2F;paste to excel&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Export-data-to-the-clipboard&quot;&gt;&lt;a href=&quot;#Export-data-to-the-clipboard&quot; class=&quot;headerlink&quot; title=&quot;Export data to the clipboard&quot;&gt;&lt;/a&gt;Export data to the clipboard&lt;/h2&gt;&lt;p&gt;It is now also possible to export the entire collection&amp;#x2F;query results to the clipboard.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/export-to-clipboard.png&quot; alt=&quot;Export to clipboard&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;MongoDB-Connection&quot;&gt;&lt;a href=&quot;#MongoDB-Connection&quot; class=&quot;headerlink&quot; title=&quot;MongoDB Connection&quot;&gt;&lt;/a&gt;MongoDB Connection&lt;/h1&gt;&lt;h2 id=&quot;Backup-connections-regularly&quot;&gt;&lt;a href=&quot;#Backup-connections-regularly&quot; class=&quot;headerlink&quot; title=&quot;Backup connections regularly&quot;&gt;&lt;/a&gt;Backup connections regularly&lt;/h2&gt;&lt;p&gt;It is now possible to automatically back up the database connections on a regular basis, and you can configure the backup directory to be a cloud drive or a specified remote shared directory. This way, you can import and use the backed up database connections on another machine.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/auto-backup-connections.png&quot; alt=&quot;Backup Connections&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Import-connections-from-URI-list&quot;&gt;&lt;a href=&quot;#Import-connections-from-URI-list&quot; class=&quot;headerlink&quot; title=&quot;Import connections from URI list&quot;&gt;&lt;/a&gt;Import connections from URI list&lt;/h2&gt;&lt;p&gt;In addition to importing the backup database connection JSON file. Importing&amp;#x2F;exporting Connection String URI list is now also supported. With this feature, you can import multiple MongoDB database connections at once. Each line of the file starting with &lt;code&gt;mongodb://&lt;/code&gt; represents a MongoDB connection, or you can add a comment at the beginning of the line to simply name the connection.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/import-mongodb-uri-list.png&quot; alt=&quot;Import MongoDB URI List&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Open-a-connection-in-a-new-window&quot;&gt;&lt;a href=&quot;#Open-a-connection-in-a-new-window&quot; class=&quot;headerlink&quot; title=&quot;Open a connection in a new window&quot;&gt;&lt;/a&gt;Open a connection in a new window&lt;/h2&gt;&lt;p&gt;NoSQLBooster&amp;#39;s object explorer supports multiple connections being displayed in the same object tree. And NoSQLBooster also supports multi-window mode, where you can assign a separate window to each connection.&lt;br&gt;And, the color field has also been added to the connection&amp;#39;s data grid so you can filter connections by color.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/connect-in-new-win.png&quot; alt=&quot;Connect in a new window &quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Database-indexing-related&quot;&gt;&lt;a href=&quot;#Database-indexing-related&quot; class=&quot;headerlink&quot; title=&quot;Database indexing related&quot;&gt;&lt;/a&gt;Database indexing related&lt;/h1&gt;&lt;h2 id=&quot;Suggest-index&quot;&gt;&lt;a href=&quot;#Suggest-index&quot; class=&quot;headerlink&quot; title=&quot;Suggest index&quot;&gt;&lt;/a&gt;Suggest index&lt;/h2&gt;&lt;p&gt;If the explain plan report query is run without an index, it will suggest that you create an index that covers the aggregation. The best indexes for your application must take a number of factors into account, including the kinds of queries you expect, the ratio of reads to writes, and the amount of free memory on your system. It is recommended to check the &lt;a href=&quot;https://www.mongodb.com/docs/manual/applications/indexes/&quot;&gt;official documentation&lt;/a&gt; of MongoDB.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/explain-suggest-index.png&quot; alt=&quot;Suggest Index&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Create-index-from-query&quot;&gt;&lt;a href=&quot;#Create-index-from-query&quot; class=&quot;headerlink&quot; title=&quot;Create index from query&quot;&gt;&lt;/a&gt;Create index from query&lt;/h2&gt;&lt;p&gt;The version 9 provides a convenient feature to create a compound indexes directly based on the query criteria.&lt;br&gt;To access this function, right-click the data grid in the &amp;quot;tree&amp;#x2F;table&amp;quot; view, pop up context menu and click &lt;code&gt;Create Index...&lt;/code&gt; menu item.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/create-index-by-query-criteria.png&quot; alt=&quot;Create Index by the query criteria&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Monitoring-tools&quot;&gt;&lt;a href=&quot;#Monitoring-tools&quot; class=&quot;headerlink&quot; title=&quot;Monitoring tools&quot;&gt;&lt;/a&gt;Monitoring tools&lt;/h1&gt;&lt;h2 id=&quot;Query-Profiler-Query-Code-and-Explain-Plan&quot;&gt;&lt;a href=&quot;#Query-Profiler-Query-Code-and-Explain-Plan&quot; class=&quot;headerlink&quot; title=&quot;Query Profiler - Query Code and Explain Plan&quot;&gt;&lt;/a&gt;Query Profiler - Query Code and Explain Plan&lt;/h2&gt;&lt;p&gt;NoSQLBooster V9 enhances the original query analyzer. You can use the new visual explain plan to analyze slow queries, check for missing indexes, and use &amp;quot;query code&amp;quot; to view and re-execute MongoDB query code.&lt;/p&gt;
&lt;h3 id=&quot;Profiler-switcher&quot;&gt;&lt;a href=&quot;#Profiler-switcher&quot; class=&quot;headerlink&quot; title=&quot;Profiler switcher&quot;&gt;&lt;/a&gt;Profiler switcher&lt;/h3&gt;&lt;p&gt;To switch off&amp;#x2F;on the profiler, click the Profiler switcher in the toolbar. When the profiler is closed, you can still view the profiling data that has been collected. If you don&amp;#39;t need the data anymore, you can click the &lt;code&gt;Turn off profiler and clean up profiled data&lt;/code&gt; to erase the data with one click.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/profiler-switcher.png&quot; alt=&quot;Profiler Switcher&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;Query-code&quot;&gt;&lt;a href=&quot;#Query-code&quot; class=&quot;headerlink&quot; title=&quot;Query code&quot;&gt;&lt;/a&gt;Query code&lt;/h3&gt;&lt;p&gt;The &amp;quot;Query Code&amp;quot; viewer displays queries in the Mongo shell language, where you can debug and fix slow queries. Click &amp;quot;Query&amp;quot; button in the toolbar to pop up &amp;quot;Query Code&amp;quot; viewer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/profiler-query-code.png&quot; alt=&quot;Profiler Query Code&quot;&gt;&lt;/p&gt;
&lt;p&gt;You can debug the code in NoSQLBooster, by clicking &amp;quot;Send to new tab&amp;quot;.&lt;/p&gt;
&lt;h3 id=&quot;Explain-code&quot;&gt;&lt;a href=&quot;#Explain-code&quot; class=&quot;headerlink&quot; title=&quot;Explain code&quot;&gt;&lt;/a&gt;Explain code&lt;/h3&gt;&lt;p&gt;To help you better understand the performance of your query, you can view your query&amp;#39;s explain plan. On the &amp;quot;Explain Plan&amp;quot; dialog, you can view the explain stages as a visual tree, where each query operation appears as a node on the tree. You can also view the explain details in raw JSON format by clicking the &amp;quot;details&amp;quot; button. Explain plan is useful for checking if a query is using an index.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/profiler-explain-plan.png&quot; alt=&quot;Profiler explain plan&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;In-progress-Operators-Preset-filters&quot;&gt;&lt;a href=&quot;#In-progress-Operators-Preset-filters&quot; class=&quot;headerlink&quot; title=&quot;In-progress Operators - Preset filters&quot;&gt;&lt;/a&gt;In-progress Operators - Preset filters&lt;/h2&gt;&lt;p&gt;We&amp;#39;ve added some preset filters that let you find slow MongoDB queries more efficiently. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/currentop-filters.png&quot; alt=&quot;CurrentOp Filters&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;SQL-query-improvements&quot;&gt;&lt;a href=&quot;#SQL-query-improvements&quot; class=&quot;headerlink&quot; title=&quot;SQL query improvements&quot;&gt;&lt;/a&gt;SQL query improvements&lt;/h1&gt;&lt;p&gt;In this release, the free edition removes all restrictions on SQL queries and adds more SQL snippets.&lt;/p&gt;
&lt;p&gt;The elemMatch function now supports like operation, and can also use the Regex function.&lt;/p&gt;
&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; TickerNews &lt;span class=&quot;keyword&quot;&gt;where&lt;/span&gt; results &lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt; elemMatch(title &lt;span class=&quot;keyword&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;#x27;%stock%&amp;#x27;&lt;/span&gt;, tickers&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;BYY&amp;#x27;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; TickerNews &lt;span class=&quot;keyword&quot;&gt;where&lt;/span&gt; results &lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt; elemMatch(title &lt;span class=&quot;keyword&quot;&gt;LIKE&lt;/span&gt; RegExp(&lt;span class=&quot;string&quot;&gt;&amp;#x27;stock&amp;#x27;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;#x27;i&amp;#x27;&lt;/span&gt;), tickers&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;BYY&amp;#x27;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we are incredibly pleased to announce the release of NoSQLBooster 9.0. It brings many new features to improve the productivity of MongoDB&#39;ers, CRUD Operations supports EJSON as parameters, send MongoDB commands to multiple replica nodes, in-use encryption connection, split an editor window, greatly improved table view and visual query builder, improved import and export functionality and more. </p><p>If you want to try NoSQLBooster 9.0 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 9.0 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>The following figure shows the main interface of version 9.0.</p><p><img src="/blog/img/v9-main.png" alt="Main interface"> </p><p>Let&#39;s dive in and get an overview of what&#39;s coming in NoSQLBooster 9.0!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#mongodb-commands-supports-ejson-as-parameters">MongoDB commands supports EJSON as parameters</a><ul><li><a href="#ejson-relaxed-mode">EJSON Relaxed Mode</a></li><li><a href="#ejson-extended-canonical-format">EJSON Extended (canonical format)</a></li><li><a href="#mongodb-shell-bson-functions">MongoDB Shell BSON Functions</a></li></ul></li><li><a href="#send-mongodb-commands-to-multiple-replica-nodes">Send MongoDB commands to multiple replica nodes</a></li><li><a href="#in-use-encryption-connection">In-use encryption connection</a></li><li><a href="#script-editor-improvements">Script editor improvements</a><ul><li><a href="#split-an-editor-window">Split an editor window</a></li><li><a href="#rename-symbol">Rename symbol</a></li><li><a href="#change-all-occurrences">Change all occurrences</a></li><li><a href="#text-transformations">Text transformations</a></li><li><a href="#no-duplicate-tabs">No duplicate tabs</a></li></ul></li><li><a href="#enhanced-data-view">Enhanced data view</a><ul><li><a href="#field-crud-operations">Field CRUD Operations</a></li><li><a href="#document-crud-operations">Document CRUD Operations</a></li><li><a href="#non-modal-docobject-viewer">Non-modal Doc&#x2F;Object Viewer</a></li><li><a href="#indicate-query-result-size-avg-size">Indicate query result size, avg size</a></li><li><a href="#tooltips-for-the-objectid">Tooltips for the ObjectId</a></li></ul></li><li><a href="#data-import-and-export">Data import and export</a><ul><li><a href="#save-collectionquery-as-a-new-collection">Save collection&#x2F;query as a new collection</a></li><li><a href="#copypaste-to-excel">Copy&#x2F;Paste to Excel</a></li><li><a href="#export-data-to-the-clipboard">Export data to the clipboard</a></li></ul></li><li><a href="#mongodb-connection">MongoDB Connection</a><ul><li><a href="#backup-connections-regularly">Backup connections regularly</a></li><li><a href="#import-connections-from-uri-list">Import connections from URI list</a></li><li><a href="#open-a-connection-in-a-new-window">Open a connection in a new window</a></li></ul></li><li><a href="#database-indexing-related">Database indexing related</a><ul><li><a href="#suggest-index">Suggest index</a></li><li><a href="#create-index-from-query">Create index from query</a></li></ul></li><li><a href="#monitoring-tools">Monitoring tools</a><ul><li><a href="#query-profiler-query-code-and-explain-plan">Query Profiler - Query Code and Explain Plan</a><ul><li><a href="#profiler-switcher">Profiler switcher</a></li><li><a href="#query-code">Query code</a></li><li><a href="#explain-code">Explain code</a></li></ul></li><li><a href="#in-progress-operators-preset-filters">In-progress Operators - Preset filters</a></li></ul></li><li><a href="#sql-query-improvements">SQL query improvements</a></li><li><a href="#other-notable-improvements">Other Notable Improvements</a><ul><li><a href="#keyboard-shortcuts">Keyboard Shortcuts</a></li><li><a href="#generate-random-passwords-for-added-users">Generate random passwords for added users</a></li></ul></li><li><a href="#minor-improvements">Minor improvements</a><ul><li><a href="#version-901">Version 9.0.1</a></li><li><a href="#version-902">Version 9.0.2</a></li><li><a href="#version-903">Version 9.0.3</a></li><li><a href="#version-905">Version 9.0.5</a></li><li><a href="#version-906">Version 9.0.6</a></li></ul></li></ul><!-- tocstop --><h1><span id="mongodb-commands-supports-ejson-as-parameters">MongoDB commands supports EJSON as parameters</span></h1><p>The Extended JSON format defines a reserved set of keys prefixed with &quot;$&quot; to represent field type information that directly corresponds to each type in BSON, the format that MongoDB uses to store data. The MongoDB shell usually uses JavaScript functions to represent MongoDB BSON types. The mongosh&#39;s CRUD methods can only use javascript BSON functions as parameters, and do not support EJSON formats, which requires conversion in order to use EJSON in queries. In V9, we have extended the mongosh shell methods to directly support EJSON as method parameters. Both canonical and relaxed formats are supported.</p><p>The following three queries are equivalent and can be used directly in V9.</p><h3><span id="ejson-relaxed-mode">EJSON Relaxed Mode</span></h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">collection</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">        <span class="string">&quot;_id&quot;</span>: &#123;</span><br><span class="line">            <span class="string">&quot;$oid&quot;</span>: <span class="string">&quot;6368556b5dfec6090e3e4b6a&quot;</span></span><br><span class="line">        &#125;,</span><br><span class="line">        <span class="string">&quot;int32&quot;</span>: <span class="number">63480</span>,</span><br><span class="line">        <span class="string">&quot;int64&quot;</span>: <span class="number">4127753986432186</span>,</span><br><span class="line">        <span class="string">&quot;double&quot;</span>: <span class="number">33.99535545410777</span>,</span><br><span class="line">        <span class="string">&quot;date&quot;</span>: &#123;</span><br><span class="line">            <span class="string">&quot;$date&quot;</span>: <span class="string">&quot;2021-11-19T03:16:06.652Z&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;)</span><br></pre></td></tr></table></figure><h3><span id="ejson-extended-canonical-format">EJSON Extended (canonical format)</span></h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">collection</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">    <span class="string">&quot;_id&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$oid&quot;</span>: <span class="string">&quot;6368556b5dfec6090e3e4b6a&quot;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="string">&quot;int32&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$numberInt&quot;</span>: <span class="string">&quot;63480&quot;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="string">&quot;int64&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$numberLong&quot;</span>: <span class="string">&quot;4127753986432186&quot;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="string">&quot;double&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$numberDouble&quot;</span>: <span class="string">&quot;33.99535545410777&quot;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="string">&quot;date&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$date&quot;</span>: &#123;</span><br><span class="line">            <span class="string">&quot;$numberLong&quot;</span>: <span class="string">&quot;1637291766652&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3><span id="mongodb-shell-bson-functions">MongoDB Shell BSON Functions</span></h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">collection</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">        <span class="attr">oid</span>: <span class="title class_">ObjectId</span>(<span class="string">&quot;6368556b5dfec6090e3e4b6a&quot;</span>),</span><br><span class="line">        <span class="attr">int32</span>: <span class="number">63480</span>,</span><br><span class="line">        <span class="attr">int64</span>: <span class="title class_">NumberLong</span>(<span class="string">&quot;4127753986432186&quot;</span>),</span><br><span class="line">        <span class="attr">double</span>: <span class="title class_">Double</span>(<span class="string">&quot;33.99535545410777&quot;</span>),</span><br><span class="line">        <span class="attr">date</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2021-11-19T11:16:06.652+08:00&quot;</span>),</span><br><span class="line">    &#125;)</span><br></pre></td></tr></table></figure><p>We also added two editor commands for interchanging EJSON and mongo shell methods.<br>Press <code>Command+Shift+P</code> to open command palette and enter &quot;EJSON&quot;.</p><ul><li>Editor: Convert EJSON to mongosh Javascript Object</li><li>Editor: Convert mongosh Javascript Object to EJSON</li></ul><h1><span id="send-mongodb-commands-to-multiple-replica-nodes">Send MongoDB commands to multiple replica nodes</span></h1><p>The replica member switcher now allows you to select multiple&#x2F;all replica set nodes and send Mongo Shell commands to those nodes at the same time. The following example allows you to quickly view version information for MongoDB instances on all nodes in a replica set.</p><p><img src="/blog/img/v9-rs-member-switcher-version.png" alt="db.version in all nodes"></p><p>The commands executed are as follows</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="title function_">version</span>()</span><br></pre></td></tr></table></figure><p>The result of the execution is aggregated into a JSON document, the member field indicates the node of the replica set, the primary node will add a PRI indication, if the node has a tag it will also be shown additionally,<br>The result field is the result of the execution of the command on the node.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">[&#123;</span><br><span class="line">    <span class="string">&quot;member&quot;</span>: <span class="string">&quot;localhost:28000-PRI&quot;</span>,</span><br><span class="line">    <span class="string">&quot;result&quot;</span>: <span class="string">&quot;8.0.0-rc8&quot;</span></span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">    <span class="string">&quot;member&quot;</span>: <span class="string">&quot;localhost:28001&quot;</span>,</span><br><span class="line">    <span class="string">&quot;result&quot;</span>: <span class="string">&quot;8.0.0-rc8&quot;</span></span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line">    <span class="string">&quot;member&quot;</span>: <span class="string">&quot;localhost:28002&quot;</span>,</span><br><span class="line">    <span class="string">&quot;result&quot;</span>: <span class="string">&quot;8.0.0-rc8&quot;</span></span><br><span class="line">&#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>As you can see, the replica set is a primary node and two secondary nodes, all of which have MongoDB version 8.0 rc.</p><h1><span id="in-use-encryption-connection">In-use encryption connection</span></h1><p>The new In-Use Encryption connection tab allows you to connect your deployments with <a href="https://www.mongodb.com/docs/v6.0/core/queryable-encryption/">Queryable Encryption</a>. Since there are so many options that it would be tedious to set them up one by one using a graphical interface, NoSQLBooster uses javascript objects directly for configuration. <a href="https://mongodb.github.io/node-mongodb-native/6.5/interfaces/AutoEncryptionOptions.html">Click here to view auto encryption options</a></p><p>Please noted, In-Use Encryption is an <code>Enterprise/Atlas only</code> feature.</p><p>For this to work, you need to provide a key vault namespace and the Key Management Service(KMS) provider. Here is a simple example.</p><p><img src="/blog/img/v9-in-use-encryption-tab.png" alt="In-use encryption tab"></p><p>When you open a collection containing encrypted fields using the find&#x2F;aggregate statement, the encrypted fields are automatically displayed. You can modify encrypted values and can insert documents and specified fields will be encrypted.<br>When in-use encryption is disabled, you cannot modify encrypted values. NoSQLBooster displays the values of these fields as a series of asterisks and inserted documents can not encrypt fields.</p><p><img src="/blog/img/v9-queryable-encryption.png" alt="Encrypted Fields"></p><h1><span id="script-editor-improvements">Script editor improvements</span></h1><h2><span id="split-an-editor-window">Split an editor window</span></h2><p>An instance of the editor window can be split into two separate views for easy editing and comparative viewing of query results. </p><p>To split a editor, Click within the editor window to give it focus and click <code>Two Columns Editor Layout</code> button.</p><p><img src="/blog/img/v9-two-columns-layout-button.png" alt="Split editor Button"></p><p><img src="/blog/img/v9-two-columns-layout.png" alt="Two Columns Layout"></p><h2><span id="rename-symbol">Rename symbol</span></h2><p>Renaming is a common operation associated with refactoring source code, and NoSQLBooster has added the Rename Symbol command (F2). Press <code>F2</code>, type the desired new name, and press Enter. All instances of symbols in this tab will be renamed.</p><p><img src="/blog/img/f2-rename-symbol.png" alt="Rename Symbol"></p><h2><span id="change-all-occurrences">Change all occurrences</span></h2><p>Let&#39;s say you&#39;ve selected a word in your code and you want to find all its occurrences in the current file. You can do this by using the new <code>Change All Occurrences</code> command <code>Ctrl+F2</code> keyboard shortcut. This will highlight all instances of the selected word, allowing you to edit them simultaneously.</p><p><img src="/blog/img/change-all-occureences.gif" alt="Change all occurrences"></p><h2><span id="text-transformations">Text transformations</span></h2><p>A new group of text transform commands has been added to the Editor Commands palette.<br>For text conversion，select the text you want to convert, press <code>Command+Shift+P</code> to pop up the command palette, enter the conversion command (e.g. title case), then execute it.</p><ul><li>Transform to camel case</li><li>Transform to kebab case</li><li>Transform to snake case</li><li>Transform to start case</li><li>Transform to words</li><li>Transform to title case</li><li>Encode Base64</li><li>Decode Base64</li><li>Decode MongoDB URI</li><li>Convert EJSON to mongosh Javascript Object</li><li>Convert mongosh Javascript Object to EJSON</li></ul><h2><span id="no-duplicate-tabs">No duplicate tabs</span></h2><p>Some users complained that there are too many tabs open in NoSQLBooster and it looks a bit messy. In V9, we have enhanced the double-click to open tabs logic appropriately. When you double-click on a collection of open tabs and the <code>find script is unchanged</code>, do not open a new tab. Just focus on the existing tabs.</p><h1><span id="enhanced-data-view">Enhanced data view</span></h1><h2><span id="field-crud-operations">Field CRUD Operations</span></h2><p>You can now perform &quot;Add&#x2F;Delete&#x2F;Edit&#x2F;Rename&#x2F;Convert Type&quot; field operations on individual documents, documents returned by a specific query, or all documents in a collection.</p><p>Moving to the Preview Code button displays the code that will be executed, and clicking on it allows you to customize the script.</p><p><img src="/blog/img/v9-right-click-menu-field-operations.png" alt="Field Right-click Menu"></p><p><img src="/blog/img/v9-field-crud-operations.png" alt="Field CRUD"></p><h2><span id="document-crud-operations">Document CRUD Operations</span></h2><p>You can perform &quot;update&#x2F;remove&quot; documents operations on individual documents, selected documents, documents returned by a specific query, or all documents in a collection.</p><p><img src="/blog/img/v9-document-crud-operations.png" alt="Document Right-click Menu"></p><h2><span id="non-modal-docx2fobject-viewer">Non-modal Doc&#x2F;Object Viewer</span></h2><p>Document&#x2F;Object viewer improved to non-modal window.  The window being active does not prevent the rest of the application from continuing. When the selected objects in the tree&#x2F;table view are changed, the object viewer will be updated synchronously.</p><p>Press <code>Ctrl+I</code> or double-click _id field to open the document viewer.</p><p><img src="/blog/img/v9-non-modal-document-viewer.png" alt="Non-modal document viewer"></p><h2><span id="indicate-query-result-size-avg-size">Indicate query result size, avg size</span></h2><p>Sometimes a query may be (or seem) fast, but have some deeply nested results or individual items containing a large number of embedded items. The V9 added a indicator to show the (average) size of the query&#x2F;aggregate results. This way, developers can get a rough estimate of how much traffic the query will generate and take it into account, e.g. by adding a prediction, limiting the date, or other methods.</p><p><img src="/blog/img/query-result-docs-tooltip.png" alt="Tooltip for query result"></p><h2><span id="tooltips-for-the-objectid">Tooltips for the ObjectId</span></h2><p>Add more information to the tooltip for objectId. It is possible to display the _id as a timestamp via generation_time.</p><p><img src="/blog/img/v9-tooltip-objectid.png" alt="Tooltip for objectId"></p><h1><span id="data-import-and-export">Data import and export</span></h1><h2><span id="save-collectionx2fquery-as-a-new-collection">Save collection&#x2F;query as a new collection</span></h2><p>The results of the query can now be exported to another collection. If the target collection does not exist, the function invokes the <a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/out/">$out</a> stage to write to the collection. If the destination collection exists, <a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/merge/">$merge</a> is used to incorporate results (insert new documents, merge documents, replace documents, keep existing documents, fail the operation, process documents with a custom update pipeline) into the existing collection.</p><p>To access this function, right-click the data grid in the &quot;tree&#x2F;table&quot; view, pop up context menu and click <code>Save This Query as a new MongoDB Collection</code> menu item.</p><p><img src="/blog/img/save-query-as-new-collection.png" alt="Save to a new collection"></p><h2><span id="copyx2fpaste-to-excel">Copy&#x2F;Paste to Excel</span></h2><p>The right-click menu of the data view has been greatly enhanced. In addition to saving the results to a new collection, the copy&#x2F;paste function also adds more options, export to EJSON, export to Excel (csv&#x2F;tsv)...</p><p><img src="/blog/img/copy-datagrid-to-excel.png" alt="Copy&#x2F;paste to excel"></p><h2><span id="export-data-to-the-clipboard">Export data to the clipboard</span></h2><p>It is now also possible to export the entire collection&#x2F;query results to the clipboard.</p><p><img src="/blog/img/export-to-clipboard.png" alt="Export to clipboard"></p><h1><span id="mongodb-connection">MongoDB Connection</span></h1><h2><span id="backup-connections-regularly">Backup connections regularly</span></h2><p>It is now possible to automatically back up the database connections on a regular basis, and you can configure the backup directory to be a cloud drive or a specified remote shared directory. This way, you can import and use the backed up database connections on another machine.</p><p><img src="/blog/img/auto-backup-connections.png" alt="Backup Connections"></p><h2><span id="import-connections-from-uri-list">Import connections from URI list</span></h2><p>In addition to importing the backup database connection JSON file. Importing&#x2F;exporting Connection String URI list is now also supported. With this feature, you can import multiple MongoDB database connections at once. Each line of the file starting with <code>mongodb://</code> represents a MongoDB connection, or you can add a comment at the beginning of the line to simply name the connection.</p><p><img src="/blog/img/import-mongodb-uri-list.png" alt="Import MongoDB URI List"></p><h2><span id="open-a-connection-in-a-new-window">Open a connection in a new window</span></h2><p>NoSQLBooster&#39;s object explorer supports multiple connections being displayed in the same object tree. And NoSQLBooster also supports multi-window mode, where you can assign a separate window to each connection.<br>And, the color field has also been added to the connection&#39;s data grid so you can filter connections by color.</p><p><img src="/blog/img/connect-in-new-win.png" alt="Connect in a new window "></p><h1><span id="database-indexing-related">Database indexing related</span></h1><h2><span id="suggest-index">Suggest index</span></h2><p>If the explain plan report query is run without an index, it will suggest that you create an index that covers the aggregation. The best indexes for your application must take a number of factors into account, including the kinds of queries you expect, the ratio of reads to writes, and the amount of free memory on your system. It is recommended to check the <a href="https://www.mongodb.com/docs/manual/applications/indexes/">official documentation</a> of MongoDB.</p><p><img src="/blog/img/explain-suggest-index.png" alt="Suggest Index"></p><h2><span id="create-index-from-query">Create index from query</span></h2><p>The version 9 provides a convenient feature to create a compound indexes directly based on the query criteria.<br>To access this function, right-click the data grid in the &quot;tree&#x2F;table&quot; view, pop up context menu and click <code>Create Index...</code> menu item.</p><p><img src="/blog/img/create-index-by-query-criteria.png" alt="Create Index by the query criteria"></p><h1><span id="monitoring-tools">Monitoring tools</span></h1><h2><span id="query-profiler-query-code-and-explain-plan">Query Profiler - Query Code and Explain Plan</span></h2><p>NoSQLBooster V9 enhances the original query analyzer. You can use the new visual explain plan to analyze slow queries, check for missing indexes, and use &quot;query code&quot; to view and re-execute MongoDB query code.</p><h3><span id="profiler-switcher">Profiler switcher</span></h3><p>To switch off&#x2F;on the profiler, click the Profiler switcher in the toolbar. When the profiler is closed, you can still view the profiling data that has been collected. If you don&#39;t need the data anymore, you can click the <code>Turn off profiler and clean up profiled data</code> to erase the data with one click.</p><p><img src="/blog/img/profiler-switcher.png" alt="Profiler Switcher"></p><h3><span id="query-code">Query code</span></h3><p>The &quot;Query Code&quot; viewer displays queries in the Mongo shell language, where you can debug and fix slow queries. Click &quot;Query&quot; button in the toolbar to pop up &quot;Query Code&quot; viewer.</p><p><img src="/blog/img/profiler-query-code.png" alt="Profiler Query Code"></p><p>You can debug the code in NoSQLBooster, by clicking &quot;Send to new tab&quot;.</p><h3><span id="explain-code">Explain code</span></h3><p>To help you better understand the performance of your query, you can view your query&#39;s explain plan. On the &quot;Explain Plan&quot; dialog, you can view the explain stages as a visual tree, where each query operation appears as a node on the tree. You can also view the explain details in raw JSON format by clicking the &quot;details&quot; button. Explain plan is useful for checking if a query is using an index.</p><p><img src="/blog/img/profiler-explain-plan.png" alt="Profiler explain plan"></p><h2><span id="in-progress-operators-preset-filters">In-progress Operators - Preset filters</span></h2><p>We&#39;ve added some preset filters that let you find slow MongoDB queries more efficiently. </p><p><img src="/blog/img/currentop-filters.png" alt="CurrentOp Filters"></p><h1><span id="sql-query-improvements">SQL query improvements</span></h1><p>In this release, the free edition removes all restrictions on SQL queries and adds more SQL snippets.</p><p>The elemMatch function now supports like operation, and can also use the Regex function.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> TickerNews <span class="keyword">where</span> results <span class="operator">=</span> elemMatch(title <span class="keyword">LIKE</span> <span class="string">&#x27;%stock%&#x27;</span>, tickers<span class="operator">=</span><span class="string">&#x27;BYY&#x27;</span>)</span><br></pre></td></tr></table></figure><p>or </p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> TickerNews <span class="keyword">where</span> results <span class="operator">=</span> elemMatch(title <span class="keyword">LIKE</span> RegExp(<span class="string">&#x27;stock&#x27;</span>,<span class="string">&#x27;i&#x27;</span>), tickers<span class="operator">=</span><span class="string">&#x27;BYY&#x27;</span>)</span><br></pre></td></tr></table></figure><span id="more"></span><h1><span id="other-notable-improvements">Other Notable Improvements</span></h1><h2><span id="keyboard-shortcuts">Keyboard Shortcuts</span></h2><p>You can customize keyboard shortcuts (or shortcut keys) by assigning them to a NoSQLBooster command. You can also remove keyboard shortcuts, assign or remove keyboard shortcuts by using a mouse or just the keyboard.</p><p>To customize keyboard shortcuts,<br><code>Menu -&gt; Options -&gt; Open Keymap...</code></p><p><img src="/blog/img/v9-shortcut-mapper.png" alt="Customize keyboard shortcuts"></p><p>Alternatively, click the Customize button on the Command Panel to change the command shortcut.</p><p><img src="/blog/img/command-palette-customize.png" alt="Customize keyboard shortcuts"></p><h2><span id="generate-random-passwords-for-added-users">Generate random passwords for added users</span></h2><p>When you use NoSQLBooster V9&#39;s UI to generate a creating-user script, a new random user password is added to that script, and as the new user is added, a MongoDB connection URI that connects to the database using that user is copied to the clipboard, which you can use to quickly test the database connection.</p><p>To create a MongoDB User, select &quot;Users&quot; node in the object explorer, pop up right-click menu, then click &quot;Add User...&quot;</p><p><img src="/blog/img/v9-create-user-script.png" alt="Create a new user"></p><h1><span id="minor-improvements">Minor improvements</span></h1><ul><li>Upgrade MongoDB Node.js driver to 6.7.</li><li>Query Code Generator - upgrade drivers to the latest version for all supported languages.</li><li>Schema analyzer -  the results of the execution of the aggregate() statement can be analyzed.</li></ul><h2><span id="version-901">Version 9.0.1</span></h2><ul><li>Added, the &quot;tlsSecure&quot; option to the TLS&#x2F;SSL connection configuration tab.<br><img src="/blog/img/v9-connection-tab-tlssecure-option.png" alt="TLS Secure Option"></li><li>Fixed, a serious bug. when editing a array field in a sorted table view, the currently edited document does not match the selected document, which can lead to incorrect document update operations.</li><li>Fixed, a bug where cloning a script tab could cause the target database of the new tab to be incorrect when multiple database connection existed.</li><li>Fixed, a bug that the timestamp of the ObjectId data field displayed in the tooltip was parsed incorrectly.</li></ul><h2><span id="version-902">Version 9.0.2</span></h2><ul><li>Fixed, an xss vulnerability issue.</li><li>Fixed, an issue where the “copy key-value pair” action was not quoting a string type. (key:string -&gt; key: &quot;string&quot;)</li></ul><h2><span id="version-903">Version 9.0.3</span></h2><ul><li>Fixed, a bug with removing array elements from a document.</li><li>Fixed, a bug where connections exported from v8.1 did not work in v9.</li></ul><h2><span id="version-905">Version 9.0.5</span></h2><ul><li>Fixed，a bug with the shortcut Ctrl+Enter does not work for saving changes in the Field → Edit Value dialog.</li></ul><h2><span id="version-906">Version 9.0.6</span></h2><ul><li>Fixed, a issue that the shortcut Ctrl+Tab does not work when switching tabs.</li><li>Fixed, a bug where using &quot;Field -&gt; Add...&quot; with option &quot;add this field to documents matching query criteria&quot; would not work when the query criteria included regular expressions.</li><li>Improved, allows data whose query results are common arrays(non-cursor) to be exported to excel using &quot;one click export&quot;.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/ReplicaSet/">ReplicaSet</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB8-0/">MongoDB8.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/EJSON/">EJSON</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/DataView/">DataView</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/In-Use-Encryption/">In-Use Encryption</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-90/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 8.1 Released! official support for MongoDB 7.0</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-81/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-81/</guid>
      <pubDate>Mon, 22 Apr 2024 01:07:00 GMT</pubDate>
      
        
        
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 8.1 today. This version includes official support for MongoDB 7.0, Visual explain </description>
        
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 8.1 today. This version includes official support for MongoDB 7.0, Visual explain for Slot-Based Query Execution along with some useful improvements and bugfix. For more information on MongoDB Server 7.0 , see <a href="https://docs.mongodb.com/manual/release-notes/7.0/">Release Notes for MongoDB 7.0</a>.</p><!-- toc --><ul><li><a href="#mongodb-70-support">MongoDB 7.0 support</a><ul><li><a href="#new-aggregation-operators">New Aggregation Operators</a></li><li><a href="#new-mongodb-70-mongosh-methods">New MongoDB 7.0 mongosh Methods</a></li><li><a href="#new-mongodb-70-aggregation-stages">New MongoDB 7.0 Aggregation Stages.</a></li></ul></li><li><a href="#visual-explain-for-slot-based-query-execution">Visual explain for Slot-Based Query Execution</a></li><li><a href="#other-improvements">Other Improvements</a><ul><li><a href="#new-tooltip-show-event-option-atlmousemove">New Tooltip Show Event Option (ATL+MouseMove)</a></li><li><a href="#minor-improvements-and-bugfix">Minor Improvements and Bugfix</a></li></ul></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-811">Version 8.1.1</a></li><li><a href="#version-812">Version 8.1.2</a></li><li><a href="#version-813">Version 8.1.3</a></li><li><a href="#version-814">Version 8.1.4</a></li><li><a href="#version-815">Version 8.1.5</a></li><li><a href="#version-816">Version 8.1.6</a></li><li><a href="#version-817">Version 8.1.7</a></li><li><a href="#version-818">Version 8.1.8</a></li><li><a href="#version-819">Version 8.1.9</a></li><li><a href="#version-8110">Version 8.1.10</a></li></ul></li></ul><!-- tocstop --><h1><span id="mongodb-70-support">MongoDB 7.0 support</span></h1><p>NoSQLBooster for MongoDB 8.1 added support for all the new mongosh methods, aggregation stages and operators of MongoDB 6.1-7.0. Aggregation Pipeline (db.xxx.aggregate().xxxx()) and Operator helper ($.) also add these helper methods.</p><h2><span id="new-aggregation-operators">New Aggregation Operators</span></h2><p>MongoDB 6.3 introduces the following aggregation operators:</p><table><thead><tr><th>Name</th><th>Description</th><th>NoSQLBooster Helper method</th></tr></thead><tbody><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/bitAnd">$bitAnd</a></td><td>Returns the result of a bitwise and operation on <br>an array of int or long values.</td><td>$.bitAnd()</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/bitNot">$bitNot</a></td><td>Returns the result of a bitwise not operation on <br>a single argument or <br> an array that contains a single int or long value.</td><td>$.bitNot()</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/bitOr">$bitOr</a></td><td>Returns the result of a bitwise or operation on <br>an array of int or long values.</td><td>$.bitOr()</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/bitXor">$bitXor</a></td><td>Returns the result of a bitwise xor (exclusive or) operation on <br>an array of int and long values.</td><td>$.bitXor()</td></tr></tbody></table><h2><span id="new-mongodb-70-mongosh-methods">New MongoDB 7.0 mongosh Methods</span></h2><table><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.createSearchIndex">db.collection.createSearchIndex()</a></td><td>Creates an Atlas Search index on a specified collection.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.dropSearchIndex">db.collection.dropSearchIndex()</a></td><td>Deletes an existing Atlas Search index.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.getSearchIndexes">db.collection.getSearchIndexes()</a></td><td>Returns information about existing Atlas Search indexes on a specified collection.</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.updateSearchIndex">db.collection.updateSearchIndex()</a></td><td>Updates an existing Atlas Search index.</td></tr></tbody></table><h2><span id="new-mongodb-70-aggregation-stages">New MongoDB 7.0 Aggregation Stages.</span></h2><table><thead><tr><th>Name</th><th>Description</th><th>NoSQLBooster Helper Method</th></tr></thead><tbody><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/listSampledQueries">$listSampledQueries</a></td><td>Lists sampled queries for all collections or <br>a specific collection.</td><td>db.coll.aggregate().listSampledQueries();<br>$.pipelineBuilder.listSampledQueries();</td></tr><tr><td><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/listSearchIndexes">$listSearchIndexes</a></td><td>Returns information about existing Atlas Search indexes<br> on a specified collection.</td><td>db.coll.aggregate().listSearchIndexes();<br>$.pipelineBuilder.listSearchIndexes();</td></tr></tbody></table><h1><span id="visual-explain-for-slot-based-query-execution">Visual explain for Slot-Based Query Execution</span></h1><p>NoSQLBooster 8.1 supports visual the explain results of the slot-based execution engine.  <a href="https://www.mongodb.com/docs/manual/reference/sbe/#slot-based-query-execution-engine">Click here</a> to see MongoDB official information on slot-based execution engine.</p><p><img src="/blog/img/visualexplain-sbe.png" alt="Visual explain for SBE"></p><h1><span id="other-improvements">Other Improvements</span></h1><h2><span id="new-tooltip-show-event-option-atlmousemove">New Tooltip Show Event Option (ATL+MouseMove)</span></h2><p>The tooltip message displayed with a delay of 1 second is sometimes quite annoying, and its inappropriate pop-up can sometimes cause unnecessary interference to the input. In 8.1 we added a new tooltip showevent option, you can use Alt+mousemove (hold alt key) to trigger the display of tooltip instead of the original mousemove event. When you press the alt key, the tooltip will be displayed immediately instead of being delayed for a second.</p><p>Use <em><strong>Menu -&gt; Options -&gt; Tooltip (Mouse Hover)</strong></em> to turn on this &quot;ALT+MouseMove&quot; option, default value is &quot;Mouse Move&quot;.</p><p><img src="/blog/img/tooltip-options.png" alt="Menu - Tooltip option"></p><h2><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h2><ul><li>Fixed, Collection JSON import cause: E11000 duplicate key error when id policy is &quot;overwrite_with_same_id&quot; and the imported _id field is UUID.</li><li>Improved, Log Viewer - Use EJSON.parse instead of JSON.parse.</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-811">Version 8.1.1</span></h2><ul><li>Improved, MongoDB AWS Authentication - add a &quot;From Credential Process&quot; option. <a href="https://www.npmjs.com/package/@aws-sdk/credential-providers#fromprocess">More about it</a>.<br><img src="/blog/img/aws-from-process.png" alt="AWS-Auth - fromProcess"></li><li>Fixed, a mongosh command <code>sh.status</code>. output result compatible issue. </li><li>Fixed, an export error where the export option did not take effect. The error occurs when the export format is &quot;Simple JSON Text&quot; and the line separator is &quot;\n,&quot;.</li></ul><h2><span id="version-812">Version 8.1.2</span></h2><ul><li>Improved, Add Mongodump to the context menu of the database&#x2F;collection tree node. Connection Tree -&gt; Database&#x2F;Collection Node -&gt; Context Menu -&gt; Export Collection -&gt; Mongodump...</li><li>Improved, Add MongoRestore to the context menu of the database&#x2F;collection tree node. Connection Tree -&gt; Database&#x2F;Collection Node -&gt; Context Menu -&gt; Import Collection -&gt; Mongorestore...</li><li>Improved, Add &quot;Add&#x2F;Edit User Snippet...&quot; item to the command palette.</li><li>Fixed, a bug where the tooltip could not pop up when the mouse hovered over the script history menu item.</li></ul><h2><span id="version-813">Version 8.1.3</span></h2><ul><li>Fixed, a bug where console.log data was out of order when importing JSON file to collection.</li></ul><h2><span id="version-814">Version 8.1.4</span></h2><ul><li>Fixed, an error where the license information in the status bar was displayed incorrectly.</li></ul><h2><span id="version-815">Version 8.1.5</span></h2><ul><li>Fixed, an errors array undefined bug that was reported when copying a collection.</li></ul><h2><span id="version-816">Version 8.1.6</span></h2><ul><li>Added, Right-click ObjectId&#x2F;Reference field and choose &quot;Follow Reference&quot; will open a document viewer with document the ObjectID&#x2F;Reference it points to. The shortcut key is &quot;shift+F7&quot;.<br><img src="/blog/img/follow-reference-dlg.png" alt="Follow Reference"></li><li>Improved, SQL correlated subqueries to allow one end of the equality operation to be an array type. Use the $cond operator to select $in instead of $eq based on the data type of the field.</li><li>Fixed, an error where updating data reported a not-primary node error when read preference mode is secondaryPreferred.</li><li>Fixed, &quot;BSONSymbol&quot; method typing definition issue.</li></ul><h2><span id="version-817">Version 8.1.7</span></h2><ul><li>Fixed, In some cases, there is an error in importing the external Relational database tables, improperly silencing the error message.</li><li>Fixed, a bug where non-public schema tables could not be listed when importing external data from PostgreSQL.</li></ul><h2><span id="version-818">Version 8.1.8</span></h2><ul><li>Improved, Moved object explorer&#39;s tooltip to the right to avoid blocking the object tree. You can now also press <code>Alt+F12</code> to switch the tooltip(MouseHover) show event to <code>Mouse Move + Alt Key Pressed</code>.<br><img src="/blog/img/object-tree-tooltip.png" alt="Object Explore Tooltip">  </li><li>Improved, sorts the fields of the index creation dialog and caches the fields to speed up the display of the field list.</li><li>Improved, SQL - Simplifies the generation of MongoDB shell scripts that project fields embedded in the object array.</li><li>Improved, SQL - Support statements like <code>select * from collection where &quot;arrayObject&quot; = elemMatch(name LIKE &#39;%abc%&#39;, title = RegExp(&#39;abc&#39;, &#39;i&#39;))</code>, LIKE and RegExp in elemMatch where condition.</li><li>Fixed, a bug with copy collection that caused an infinite import error when the source and target collection were the same.</li><li>Fixed, a collection export error. When there is already an active query in the current tab, a collection export error occurs when clicking on Export Collection in the right-click menu of the object explorer.</li><li>Fixed, a bug that pressing <code>Command+Shift+[</code> or <code>Command+Shift+]</code> to switch tabs doesn&#39;t work under MacOS.</li><li>Fixed, a bug that clicking on a collection in the search result list of the object tree could not open the collection directly.</li></ul><h2><span id="version-819">Version 8.1.9</span></h2><ul><li>Improved, to avoid too much invalid logging, only the first command output is printed when the mongosh command is inside a for loop.</li><li>Improved, in the &quot;Add script to favorites (user snippets)&quot; feature, it is possible to override renamed code snippets.</li></ul><h2><span id="version-8110">Version 8.1.10</span></h2><ul><li>Fixed, a bug in the UI display when the tree view is refreshed</li><li>Improved, allow connection to MongoDB Server 8.0.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB7-0/">MongoDB7.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Explain/">Explain</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-81/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>AWS IAM Passwordless Authentication support</title>
      <link>https://www.nosqlbooster.com/blog/aws-sso-auth-support/</link>
      <guid>https://www.nosqlbooster.com/blog/aws-sso-auth-support/</guid>
      <pubDate>Sat, 17 Jun 2023 00:30:01 GMT</pubDate>
      
        
        
      <description>&lt;p&gt;In 8.0.12, NoSQLBooster added support for MongoDB-AWS IAM authentication. Now you can connect to MongoDB with AWS IAM (AWS Single Sign-On</description>
        
      
      
      
      <content:encoded><![CDATA[<p>In 8.0.12, NoSQLBooster added support for MongoDB-AWS IAM authentication. Now you can connect to MongoDB with AWS IAM (AWS Single Sign-On) Passwordless Authentication.</p><h1><span id="configure-aws-sso-authentication">Configure AWS SSO Authentication</span></h1><h2><span id="set-up-aws-profile-for-aws-cli-with-aws-sso-configuration">Set up AWS Profile for AWS CLI with AWS SSO configuration</span></h2><p>If you want to learn how to use AWS single sign-on (SSO) to set up AWS CLI, you can refer to <a href="https://towardsthecloud.com/set-up-aws-cli-aws-sso">the following documentation</a>.</p><p>Here, we have set up AWS Profile for AWS CLI with AWS SSO configuration with the following configuration of our AWS SSO setup.</p><p>The location of the configuration file is ~&#x2F;.aws&#x2F;config. </p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">#######################</span><br><span class="line">####   AWS SSO     ####</span><br><span class="line">#######################</span><br><span class="line"></span><br><span class="line">[profile aws-sso-demo-account]</span><br><span class="line">sso_start_url = https://d-93670bbbbb.awsapps.com/start</span><br><span class="line">sso_region = eu-west-1</span><br><span class="line">sso_account_id = 012345678910</span><br><span class="line">sso_role_name = PowerUserAccess</span><br><span class="line">region = eu-west-1</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="set-up-aws-sso-authentication-in-nosqlbooster">Set up AWS SSO Authentication in NoSQLBooster</span></h2><ol><li>Open the connection configuration editor of NoSQLBooster, switch to the Authentication tab, and use the MongoDB-AWS authentication method.</li></ol><p><img src="/blog/img/aws-sso-auth1.png" alt="AWS-Auth interface"> </p><ol start="2"><li>Check the &quot;From SSO (AWS Single Sign-on)&quot; checkbox. </li><li>Fill in the configured AWS profile &quot;aws-sso-demo-account&quot; in the &quot;Credential Profile&quot; edit box. </li><li>Click &quot;Test connection&quot;.</li></ol><p>These are all the configuration steps.</p>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/authorization/">authorization</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/mongodb-aws/">mongodb-aws</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/AWS/">AWS</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SSO/">SSO</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/aws-sso-auth-support/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 8.0 Released!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-80/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-80/</guid>
      <pubDate>Thu, 01 Jun 2023 00:50:01 GMT</pubDate>
      
      <description>&lt;p&gt;We are pleased to mark another important milestone for NoSQLBooster for MongoDB, the final version of 8.0. This major upgrade includes using &lt;a href=&quot;https://www.mongodb.com/docs/mongodb-shell/&quot;&gt;mongosh&lt;/a&gt; instead of &lt;a href=&quot;https://www.mongodb.com/docs/v5.2/reference/program/mongo/&quot;&gt;legacy mongo shell&lt;/a&gt; as an embedded shell, support for MongoDB 6.0, MongoDB operator helper, aggregation pipeline builder, a separate result tab for each mongosh command, greatly improved data view, one-click filtering&amp;#x2F;projection, import and export tools, test data generator and more. &lt;/p&gt;
&lt;p&gt;If you want to try NoSQLBooster 8.0 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 8.0 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 8.0.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v8-main-interface-dark.png&quot; alt=&quot;Main interface&quot;&gt; &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s dive in and get an overview of what&amp;#39;s coming in NoSQLBooster 8.0!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We are pleased to mark another important milestone for NoSQLBooster for MongoDB, the final version of 8.0. This major upgrade includes using <a href="https://www.mongodb.com/docs/mongodb-shell/">mongosh</a> instead of <a href="https://www.mongodb.com/docs/v5.2/reference/program/mongo/">legacy mongo shell</a> as an embedded shell, support for MongoDB 6.0, MongoDB operator helper, aggregation pipeline builder, a separate result tab for each mongosh command, greatly improved data view, one-click filtering&#x2F;projection, import and export tools, test data generator and more. </p><p>If you want to try NoSQLBooster 8.0 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 8.0 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>The following figure shows the main interface of version 8.0.</p><p><img src="/blog/img/v8-main-interface-dark.png" alt="Main interface"> </p><p>Let&#39;s dive in and get an overview of what&#39;s coming in NoSQLBooster 8.0!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><span id="more"></span><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#mongodb-shell-mongosh">MongoDB Shell (mongosh)</a><ul><li><a href="#breaking-changes">Breaking Changes</a><ul><li><a href="#1-cursormap-return-value-is-changed-from-array-to-cursor-object">1. cursor.map (return value is changed from Array to Cursor object)</a></li><li><a href="#2-dbgetusers-return-value-is-changed-from-array-of-users-to-resultusers">2. db.getUsers (return value is changed from Array of users to result.users)</a></li><li><a href="#3-dbgetroles-return-value-is-changed-from-array-of-roles-to-resultroles">3. db.getRoles (return value is changed from Array of roles to result.roles)</a></li></ul></li></ul></li><li><a href="#mongodb-60-support">MongoDB 6.0 support</a><ul><li><a href="#mongodb-6-new-stages-documents-densify-and-fill">MongoDB 6 new stages ($documents, $densify and $fill)</a></li><li><a href="#mongodb-atlas-search-search">MongoDB Atlas Search ($search)</a></li></ul></li><li><a href="#mongodb-shell-extension">MongoDB shell extension</a><ul><li><a href="#mongodb-operator-helper">MongoDB Operator Helper ($)</a></li><li><a href="#aggregation-pipeline-builder-pipelinebuilder">Aggregation Pipeline Builder ($.pipelineBuilder)</a></li></ul></li><li><a href="#enhanced-data-view">Enhanced data view</a><ul><li><a href="#one-click-filtering">One-click filtering</a></li><li><a href="#one-click-projection">One-click projection</a></li><li><a href="#display-datetime-in">Display DateTime in</a></li><li><a href="#display-binary-buffer-encoding-in">Display Binary Buffer Encoding in</a></li><li><a href="#tooltip">Tooltip</a></li><li><a href="#tree-view-new-filter-row">Tree View (new Filter Row)</a></li><li><a href="#json-view-new-relaxed-ejson-format">JSON View (new Relaxed EJSON format)</a></li></ul></li><li><a href="#import-data">Import Data</a></li><li><a href="#export-data">Export Data</a></li><li><a href="#test-data-generator">Test Data Generator</a></li><li><a href="#schema-documentation">Schema Documentation</a></li><li><a href="#minor-improvements">Minor Improvements</a><ul><li><a href="#tasks-run-script-task">Tasks - run script task</a></li><li><a href="#tab-switcher">Tab switcher</a></li><li><a href="#database-object-explorer-redesigned-tree-node-locator">Database object explorer - redesigned tree node locator</a></li></ul></li><li><a href="#miscellaneous-improvements-and-bug-fixes">Miscellaneous improvements and bug fixes</a></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-802">Version 8.0.2</a></li><li><a href="#version-803">Version 8.0.3</a></li><li><a href="#version-804">Version 8.0.4</a></li><li><a href="#version-805">Version 8.0.5</a></li><li><a href="#version-806">Version 8.0.6</a></li><li><a href="#version-807">Version 8.0.7</a></li><li><a href="#version-808">Version 8.0.8</a></li><li><a href="#version-809">Version 8.0.9</a></li><li><a href="#version-8010">Version 8.0.10</a></li><li><a href="#version-8011">Version 8.0.11</a></li><li><a href="#version-8012">Version 8.0.12</a></li><li><a href="#version-8013">Version 8.0.13</a></li><li><a href="#version-8014">Version 8.0.14</a></li><li><a href="#version-8015">Version 8.0.15</a></li></ul></li></ul><!-- tocstop --><h1><span id="mongodb-shell-mongosh">MongoDB Shell (mongosh)</span></h1><p>In version 8.0, NoSQLBooster uses <a href="https://www.mongodb.com/docs/mongodb-shell/">mongosh</a> as the new embedded shell to replace <a href="https://www.mongodb.com/docs/v5.2/reference/program/mongo/">legacy mongo shell</a>. To be as compatible as possible with older versions, NoSQLBooster loads <a href="https://github.com/mongodb-labs/mongosh-snippets/tree/main/snippets/mongocompat#mongocompat">mongocompat mongosh-snippets</a> by default, which provide mongo legacy shell compatibility APIs.</p><p><a href="https://www.mongodb.com/docs/mongodb-shell/reference/compatibility/">Click here to view compatibility Changes with Legacy mongo Shell</a></p><h2><span id="breaking-changes">Breaking Changes</span></h2><p>In addition to the <a href="https://www.mongodb.com/docs/mongodb-shell/reference/compatibility/">compatibility changes</a> officially listed by MongoDB, we will focus here on some unlisted breaking changes.<br>Special attention should be paid to the <em><strong>cursor.map()</strong></em> method, which is more commonly used and may prevent some of the existing code from working.</p><h3><span id="1-cursormap-return-value-is-changed-from-array-to-cursor-object">1. cursor.map (return value is changed from Array to Cursor object)</span></h3><p>The <em><strong>cursor.map()</strong></em> method of mongosh return a <a href="https://www.mongodb.com/docs/manual/reference/method/js-cursor/">Cursor object</a>, whereas legacy mongo shell returns an Array directly. Note that .map() only converts the type, it does not create a new cursor. You can convert the Cursor object to an Array with .toArray(). </p><p>Let&#39;s compare the code. The official example of mongodb is used here.</p><p>Create a collection products with these documents</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">products</span>.<span class="title function_">insertMany</span>([</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">1</span>, <span class="attr">name</span>: <span class="string">&#x27;widget&#x27;</span>, <span class="attr">price</span>: <span class="number">10.89</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">2</span>, <span class="attr">name</span>: <span class="string">&#x27;thing&#x27;</span>, <span class="attr">price</span>: <span class="number">11.24</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">3</span>, <span class="attr">name</span>: <span class="string">&#x27;moppet&#x27;</span>, <span class="attr">price</span>: <span class="number">8</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">4</span>, <span class="attr">name</span>: <span class="string">&#x27;cosa&#x27;</span>, <span class="attr">price</span>: <span class="number">24.19</span> &#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><p>Calculate a discounted sale price and return the results as an array.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//mongosh</span></span><br><span class="line"><span class="keyword">var</span> salePrices = db.<span class="property">products</span>.<span class="title function_">find</span>().<span class="title function_">map</span>(<span class="function">(<span class="params">p</span>)=&gt;</span>p.<span class="property">price</span> * <span class="number">0.9</span>).<span class="title function_">toArray</span>();</span><br><span class="line"></span><br><span class="line"><span class="comment">//legacy mongo shell, no toArray()</span></span><br><span class="line"><span class="keyword">var</span> salePrices = db.<span class="property">products</span>.<span class="title function_">find</span>().<span class="title function_">map</span>(<span class="function">(<span class="params">p</span>)=&gt;</span>p.<span class="property">price</span> * <span class="number">0.9</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">//salePrices [9.801,10.116,7.2,21.771]</span></span><br></pre></td></tr></table></figure><h3><span id="2-dbgetusers-return-value-is-changed-from-array-of-users-to-resultusers">2. db.getUsers (return value is changed from Array of users to result.users)</span></h3><p>Let&#39;s compare the return value.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="title function_">getSiblingDB</span>(<span class="string">&quot;products&quot;</span>).<span class="title function_">getUsers</span>( &#123; <span class="attr">showCustomData</span>: <span class="literal">false</span> &#125; )</span><br></pre></td></tr></table></figure><p>Example output from mongosh:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">   <span class="attr">users</span>: [</span><br><span class="line">     &#123;</span><br><span class="line">       <span class="attr">_id</span>: <span class="string">&#x27;products.accountAdmin01&#x27;</span>,</span><br><span class="line">       <span class="attr">userId</span>: <span class="title function_">UUID</span>(<span class="string">&quot;0955afc1-303c-4683-a029-8e17dd5501f4&quot;</span>),</span><br><span class="line">       <span class="attr">user</span>: <span class="string">&#x27;accountAdmin01&#x27;</span>,</span><br><span class="line">       <span class="attr">db</span>: <span class="string">&#x27;products&#x27;</span>,</span><br><span class="line">       <span class="attr">roles</span>: [ &#123; <span class="attr">role</span>: <span class="string">&#x27;readWrite&#x27;</span>, <span class="attr">db</span>: <span class="string">&#x27;products&#x27;</span> &#125; ],</span><br><span class="line">       <span class="attr">mechanisms</span>: [ <span class="string">&#x27;SCRAM-SHA-1&#x27;</span>, <span class="string">&#x27;SCRAM-SHA-256&#x27;</span> ]</span><br><span class="line">     &#125;</span><br><span class="line">   ],</span><br><span class="line">   <span class="attr">ok</span>: <span class="number">1</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Example output from legacy mongo shell:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line">     &#123;</span><br><span class="line">       <span class="attr">_id</span>: <span class="string">&#x27;products.accountAdmin01&#x27;</span>,</span><br><span class="line">       <span class="attr">userId</span>: <span class="title function_">UUID</span>(<span class="string">&quot;0955afc1-303c-4683-a029-8e17dd5501f4&quot;</span>),</span><br><span class="line">       <span class="attr">user</span>: <span class="string">&#x27;accountAdmin01&#x27;</span>,</span><br><span class="line">       <span class="attr">db</span>: <span class="string">&#x27;products&#x27;</span>,</span><br><span class="line">       <span class="attr">roles</span>: [ &#123; <span class="attr">role</span>: <span class="string">&#x27;readWrite&#x27;</span>, <span class="attr">db</span>: <span class="string">&#x27;products&#x27;</span> &#125; ],</span><br><span class="line">       <span class="attr">mechanisms</span>: [ <span class="string">&#x27;SCRAM-SHA-1&#x27;</span>, <span class="string">&#x27;SCRAM-SHA-256&#x27;</span> ]</span><br><span class="line">     &#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>In mongosh, to get a list of users, you need to execute:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="title function_">getUsers</span>().<span class="property">users</span>;<span class="comment">// mongosh</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//db.getUsers(); //legacy mongo shell</span></span><br></pre></td></tr></table></figure><h3><span id="3-dbgetroles-return-value-is-changed-from-array-of-roles-to-resultroles">3. db.getRoles (return value is changed from Array of roles to result.roles)</span></h3><p>Like the db.getUsers method, mongosh changed the return value from Array of roles to result.roles. </p><p>In mongosh, to get a list of roles, you need to execute:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="title function_">getRoles</span>().<span class="property">roles</span>;<span class="comment">// mongosh</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//db.getRoles(); //legacy mongo shell</span></span><br></pre></td></tr></table></figure><h1><span id="mongodb-60-support">MongoDB 6.0 support</span></h1><p>NoSQLBooster 8.0 upgrades the MongoDB Node.js driver to 4.10 and embedded mongosh to 1.6, adding support for all the new aggregation stages and operators of MongoDB 6.0, and NoSQLBooster 8.0 allows all new MongoDB 6.0 aggregation expressions to be used as SQL functions in SQL statements. </p><h2><span id="mongodb-6-new-stages-documents-densify-and-fill">MongoDB 6 new stages ($documents, $densify and $fill)</span></h2><p>MongoDB 6.0 adds new stages, <a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/documents/">$documents</a>, <a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/densify/">$densify</a> and <a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/fill/">$fill</a>. NoSQLBooster adds the equivalent aggregation chain method and code templates for these new stages.</p><ul><li><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/documents/">$documents</a> - Returns literal documents from input values.</li><li><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/densify/">$densify</a> -  Creates new documents in a sequence of documents where certain values in a field are missing.</li><li><a href="https://www.mongodb.com/docs/manual/reference/operator/aggregation/fill/">$fill</a> -  Populates null and missing field values within documents.</li></ul><p>Here is an example of using $documents and $densify</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="title function_">aggregate</span>().<span class="title function_">documents</span>([</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;metadata&quot;</span>: &#123; <span class="string">&quot;sensorId&quot;</span>: <span class="number">5578</span>, <span class="string">&quot;type&quot;</span>: <span class="string">&quot;temperature&quot;</span> &#125;,</span><br><span class="line">        <span class="string">&quot;timestamp&quot;</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T00:00:00.000Z&quot;</span>),</span><br><span class="line">        <span class="string">&quot;temp&quot;</span>: <span class="number">12</span></span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;metadata&quot;</span>: &#123; <span class="string">&quot;sensorId&quot;</span>: <span class="number">5578</span>, <span class="string">&quot;type&quot;</span>: <span class="string">&quot;temperature&quot;</span> &#125;,</span><br><span class="line">        <span class="string">&quot;timestamp&quot;</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T12:00:00.000Z&quot;</span>),</span><br><span class="line">        <span class="string">&quot;temp&quot;</span>: <span class="number">12</span></span><br><span class="line">    &#125;</span><br><span class="line">]).<span class="title function_">densify</span>(&#123;</span><br><span class="line">    <span class="attr">field</span>: <span class="string">&quot;timestamp&quot;</span>,</span><br><span class="line">    <span class="attr">range</span>: &#123;</span><br><span class="line">        <span class="attr">step</span>: <span class="number">1</span>,</span><br><span class="line">        <span class="attr">unit</span>: <span class="string">&quot;hour&quot;</span>,</span><br><span class="line">        <span class="attr">bounds</span>: [<span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T00:00:00.000Z&quot;</span>), <span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T08:00:00.000Z&quot;</span>)]</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>Equivalent to the following mongosh script, but more concise, and easy to write,  not to mention code completion.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="title function_">aggregate</span>(</span><br><span class="line"> [</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$documents&quot;</span> : [</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;metadata&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;sensorId&quot;</span> : <span class="number">5578</span>,</span><br><span class="line"><span class="string">&quot;type&quot;</span> : <span class="string">&quot;temperature&quot;</span></span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;timestamp&quot;</span> : <span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T08:00:00.000+08:00&quot;</span>),</span><br><span class="line"><span class="string">&quot;temp&quot;</span> : <span class="number">12</span></span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;metadata&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;sensorId&quot;</span> : <span class="number">5578</span>,</span><br><span class="line"><span class="string">&quot;type&quot;</span> : <span class="string">&quot;temperature&quot;</span></span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;timestamp&quot;</span> : <span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T20:00:00.000+08:00&quot;</span>),</span><br><span class="line"><span class="string">&quot;temp&quot;</span> : <span class="number">12</span></span><br><span class="line">&#125;</span><br><span class="line">]</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$densify&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;field&quot;</span> : <span class="string">&quot;timestamp&quot;</span>,</span><br><span class="line"><span class="string">&quot;range&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;step&quot;</span> : <span class="number">1</span>,</span><br><span class="line"><span class="string">&quot;unit&quot;</span> : <span class="string">&quot;hour&quot;</span>,</span><br><span class="line"><span class="string">&quot;bounds&quot;</span> : [</span><br><span class="line"><span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T08:00:00.000+08:00&quot;</span>),</span><br><span class="line"><span class="title class_">ISODate</span>(<span class="string">&quot;2021-05-18T16:00:00.000+08:00&quot;</span>)</span><br><span class="line">]</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><h2><span id="mongodb-atlas-search-search">MongoDB Atlas Search ($search)</span></h2><p>NoSQLBooster also adds the equivalent aggregation chain methods (AggregationCursor.search and AggregationCursor.searchmeta) and code templates for <a href="https://www.mongodb.com/docs/atlas/atlas-search/">MongoDB Atlas Search</a> stages <a href="https://www.mongodb.com/docs/atlas/atlas-search/query-syntax/#-search">$search</a> and <a href="https://www.mongodb.com/docs/atlas/atlas-search/query-syntax/#-searchmeta">$searchmeta</a>.</p><p>Here is an example for Single Field Search</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">cars</span>.<span class="title function_">aggregate</span>().<span class="title function_">search</span>(&#123;</span><br><span class="line">      <span class="attr">text</span>: &#123;</span><br><span class="line">        <span class="attr">query</span>: <span class="string">&quot;Ford&quot;</span>,</span><br><span class="line">        <span class="attr">path</span>: <span class="string">&quot;make&quot;</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;)</span><br></pre></td></tr></table></figure><h1><span id="mongodb-shell-extension">MongoDB shell extension</span></h1><h2><span id="mongodb-operator-helper">MongoDB Operator Helper ($)</span></h2><p>NoSQLBooster version 8 exposes a new global variable, <em><strong>$</strong></em>, which converts chained MongoDB operator methods into a JSON object.  We call it the operator helper.  It upgrades the query builder(qb) from previous versions to support all MongoDB operators, not just operators for the <em><strong>db.collection.find</strong></em> methods. You can use it directly in any mongosh method. NoSQLBooster provides <em><strong>a large number of code templates</strong></em> to simplify the input of method parameters. The form of the chained method is also easier to read and error check.</p><p>Here are a few simple rules for using operator helper</p><ol><li>Except for the <strong>$.where(&quot;field&quot;)</strong> and <strong>$.build()</strong> method, all the other methods are simple and correspond to an operator of MongoDB. e.g.  <strong>$.gte(xxx) -&gt; { $gte: xxx }</strong></li><li>If the method has only one parameter, a key-value pair is generated directly. e.g. <strong>$.gte(5) -&gt; {$gte: 5}</strong>.</li><li>If the method has more than one parameter, the parameters is <em><strong>converted to an array</strong></em> in the generated JSON object. e.g.  <strong>$.gte(&quot;$f1&quot;, 5) -&gt; {$gte: [&quot;$f1&quot;, 5] }</strong></li></ol><p>Let&#39;s take a look at some examples.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"> <span class="title function_">print</span>($.<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>)); <span class="comment">// OperatorHelper -&gt;  &#123; $gte:18, $lte:65 &#125;</span></span><br><span class="line"></span><br><span class="line"> <span class="title function_">print</span>($.<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>).<span class="title function_">build</span>()); <span class="comment">// got plain JSON object, Can be used in non mongosh method,   &#123; $gte:18, $lte:65 &#125;</span></span><br><span class="line"></span><br><span class="line"> <span class="title function_">print</span>($.<span class="title function_">gte</span>(<span class="string">&quot;$age&quot;</span>, <span class="number">18</span>)); <span class="comment">// OperatorHelper:  -&gt;  &#123; $gte: [&quot;$age&quot;, 18] &#125;</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// instead of writing:</span></span><br><span class="line"> db.<span class="property">users</span>.<span class="title function_">findOne</span>(&#123;<span class="attr">age</span>:&#123;<span class="attr">$gte</span>:<span class="number">18</span>,<span class="attr">$lte</span>:<span class="number">65</span>&#125;&#125;);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// we can write:</span></span><br><span class="line"> db.<span class="property">users</span>.<span class="title function_">findOne</span>($.<span class="title function_">where</span>(<span class="string">&quot;age&quot;</span>).<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>));</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="comment">// instead of writing:</span></span><br><span class="line"> db.<span class="property">users</span>.<span class="title function_">updateOne</span>(&#123;<span class="attr">_id</span>:<span class="number">1</span>&#125;, &#123;<span class="attr">$set</span>: &#123;<span class="attr">lastLoginTime</span>: <span class="keyword">new</span> <span class="title class_">Date</span>()&#125;, <span class="attr">$inc</span>: &#123;<span class="attr">numberOfLogins</span>: <span class="number">1</span>&#125;&#125;);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// we can write:</span></span><br><span class="line"> db.<span class="property">users</span>.<span class="title function_">updateOne</span>(&#123;<span class="attr">_id</span>:<span class="number">1</span>&#125;, $.<span class="title function_">set</span>(&#123;<span class="attr">lastLoginTime</span>: <span class="keyword">new</span> <span class="title class_">Date</span>()&#125;).<span class="title function_">inc</span>(&#123;<span class="attr">numberOfLogins</span>: <span class="number">1</span>&#125;));</span><br><span class="line"></span><br><span class="line"><span class="comment">//instead of writing:</span></span><br><span class="line"> db.<span class="property">inventory</span>.<span class="title function_">aggregate</span>([&#123;</span><br><span class="line">     <span class="attr">$project</span>: &#123;</span><br><span class="line">         <span class="attr">item</span>: <span class="number">1</span>,</span><br><span class="line">         <span class="attr">qty</span>: <span class="number">1</span>,</span><br><span class="line">         <span class="attr">qtyGte250Lt500</span>: &#123;</span><br><span class="line">             <span class="attr">$and</span>: [&#123;</span><br><span class="line">                 <span class="attr">$gte</span>: [<span class="string">&quot;$qty&quot;</span>, <span class="number">250</span>]</span><br><span class="line">             &#125;, &#123;</span><br><span class="line">                 <span class="attr">$lt</span>: [<span class="string">&quot;$qty&quot;</span>, <span class="number">300</span>]</span><br><span class="line">             &#125;]</span><br><span class="line">         &#125;,</span><br><span class="line">         <span class="attr">_id</span>: <span class="number">0</span></span><br><span class="line">     &#125;</span><br><span class="line"> &#125;, &#123;</span><br><span class="line">     <span class="attr">$limit</span>: <span class="number">1000</span></span><br><span class="line"> &#125;])</span><br><span class="line"></span><br><span class="line"> <span class="comment">//we can write:</span></span><br><span class="line"> db.<span class="property">inventory</span>.<span class="title function_">aggregate</span>().<span class="title function_">project</span>(&#123;</span><br><span class="line">     <span class="attr">item</span>: <span class="number">1</span>,</span><br><span class="line">     <span class="attr">qty</span>: <span class="number">1</span>,</span><br><span class="line">     <span class="attr">qtyGte250Lt500</span>: $.<span class="title function_">and</span>($.<span class="title function_">gte</span>(<span class="string">&quot;$qty&quot;</span>,<span class="number">250</span>), $.<span class="title function_">lt</span>(<span class="string">&quot;$qty&quot;</span>, <span class="number">300</span>)),</span><br><span class="line">     <span class="attr">_id</span>: <span class="number">0</span></span><br><span class="line"> &#125;).<span class="title function_">limit</span>(<span class="number">1000</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment">//or</span></span><br><span class="line"> db.<span class="property">inventory</span>.<span class="title function_">aggregate</span>().<span class="title function_">project</span>(</span><br><span class="line">     $.<span class="title function_">where</span>(<span class="string">&quot;item&quot;</span>,<span class="number">1</span>)</span><br><span class="line">      .<span class="title function_">where</span>(<span class="string">&quot;qty&quot;</span>,<span class="number">1</span>)</span><br><span class="line">      .<span class="title function_">where</span>(<span class="string">&quot;qtyGte250Lt500&quot;</span>).<span class="title function_">and</span>($.<span class="title function_">gte</span>(<span class="string">&quot;$qty&quot;</span>,<span class="number">250</span>), $.<span class="title function_">lt</span>(<span class="string">&quot;$qty&quot;</span>, <span class="number">300</span>))</span><br><span class="line">      .<span class="title function_">where</span>(<span class="string">&quot;_id&quot;</span>,<span class="number">0</span>)</span><br><span class="line"> ).<span class="title function_">limit</span>(<span class="number">1000</span>)</span><br></pre></td></tr></table></figure><h2><span id="aggregation-pipeline-builder-pipelinebuilder">Aggregation Pipeline Builder ($.pipelineBuilder)</span></h2><p>In previous versions, we have implemented chained aggregate pipeline builder, all MongoDB aggregate stage have a corresponding chainable method. </p><p>To create an aggregation pipeline, use the following syntax in the MongoDB Shell:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">db.&lt;collection&gt;.<span class="title function_">aggregate</span>([</span><br><span class="line">  &#123;</span><br><span class="line">    &lt;$stage1&gt;</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    &lt;$stage2&gt;</span><br><span class="line">  &#125;</span><br><span class="line">  &#123;</span><br><span class="line">    &lt;$stage3&gt;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">//...</span></span><br><span class="line">])</span><br></pre></td></tr></table></figure><p>We can write in NoSQLBooster:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">db.&lt;collection&gt;.<span class="title function_">aggregate</span>()</span><br><span class="line">  .<span class="title function_">stage1</span>()</span><br><span class="line">  .<span class="title function_">stage2</span>()</span><br><span class="line">  .<span class="title function_">stage3</span>()</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>In version 8, we enhanced the use scenario of the chained methods, which you can use it to build the pipeline parameter required in some mongodb shell methods or use it in your code.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//instead of writing:</span></span><br><span class="line"><span class="keyword">let</span> pipeline=[</span><br><span class="line">     &#123;</span><br><span class="line">         &lt;$stage1&gt;</span><br><span class="line">     &#125;,</span><br><span class="line">     &#123;</span><br><span class="line">         &lt;$stage2&gt;</span><br><span class="line">     &#125;</span><br><span class="line">     &#123;</span><br><span class="line">         &lt;$stage3&gt;</span><br><span class="line">     &#125;</span><br><span class="line">     <span class="comment">//...</span></span><br><span class="line">     ]</span><br><span class="line"></span><br><span class="line"><span class="comment">//we can write:</span></span><br><span class="line">pipeline= $.pipelineBuilder.<span class="title function_">stage1</span>().<span class="title function_">stage2</span>().<span class="title function_">stage3</span>()</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>Let&#39;s take a look at an example of creating a readonly view using $.pipelineBuilder.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment">//instead of writing:</span></span><br><span class="line"> db.<span class="title function_">createView</span>(</span><br><span class="line">    <span class="string">&quot;firstYearsScoreDesc&quot;</span>,</span><br><span class="line">    <span class="string">&quot;students&quot;</span>,</span><br><span class="line">    [ </span><br><span class="line">       &#123; <span class="attr">$match</span>: &#123; <span class="attr">year</span>: <span class="number">1</span> &#125; &#125;,</span><br><span class="line">       &#123; $sort : &#123; <span class="attr">score</span>: -<span class="number">1</span>&#125; &#125; </span><br><span class="line">   ] <span class="comment">//pipeline</span></span><br><span class="line"> )</span><br><span class="line"></span><br><span class="line"><span class="comment">//we can write:</span></span><br><span class="line"> db.<span class="title function_">createView</span>(</span><br><span class="line">    <span class="string">&quot;firstYearsScoreDesc&quot;</span>,</span><br><span class="line">    <span class="string">&quot;students&quot;</span>,</span><br><span class="line">    $.pipelineBuilder.<span class="title function_">match</span>(&#123;<span class="attr">year</span>:<span class="number">1</span>&#125;).<span class="title function_">sort</span>(&#123;<span class="attr">score</span>: -<span class="number">1</span>&#125;)  <span class="comment">//pipeline</span></span><br><span class="line"> )</span><br></pre></td></tr></table></figure><h1><span id="enhanced-data-view">Enhanced data view</span></h1><p>Data representation is a very important part of graphical user interface tools. In version 8, the biggest enhancement is that multiple query commands in a single script can be displayed side by side as tabs, and the results of each mongosh command can be displayed in an exclusive query result tab.</p><p>Pressing <code>F5</code> or <code>Command+Enter</code> to execute the selected script retains the open results tabs, while executing the entire script closes all open results tabs first.</p><p><img src="/blog/img/v8-multiple-command-tabs.png" alt="One-click filtering"></p><h2><span id="one-click-filtering">One-click filtering</span></h2><p>This feature has been greatly enhanced so that it can now generate a submenu of query conditions based on the BSON type of the value, rather than just the value equality comparison.<br>For date types, we have added a variety of query options for a range of dates, including day, month, week, year, etc.</p><p>The following figure shows an one-click filtering submenu of date-type data, which you can access by right-clicking a cell in the tree &#x2F; table view.</p><p><img src="/blog/img/v8-one-click-filtering-datetime.png" alt="One-click filtering"></p><p>The following is the code generated by clicking on the <em><strong>&quot;dob in year (1976)&quot;</strong></em> menu item, the query condition is to filter the data of all birthdays in 1976.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">unicorns</span>.<span class="title function_">find</span>()</span><br><span class="line">    .<span class="title function_">where</span>(<span class="string">&quot;dob&quot;</span>, &#123;</span><br><span class="line">        <span class="attr">$gte</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;1976-01-01T00:00:00.000+08:00&quot;</span>),</span><br><span class="line">        <span class="attr">$lt</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;1977-01-01T00:00:00.000+08:00&quot;</span>)</span><br><span class="line">    &#125;)</span><br><span class="line">    .<span class="title function_">projection</span>(&#123;&#125;)</span><br><span class="line">    .<span class="title function_">sort</span>(&#123; <span class="attr">_id</span>: -<span class="number">1</span> &#125;)</span><br><span class="line">    .<span class="title function_">limit</span>(<span class="number">1000</span>)</span><br></pre></td></tr></table></figure><h2><span id="one-click-projection">One-click projection</span></h2><p>The One-click projection feature adds a context sub-menu, a new option to exclude fields, and a dialog box for field selection.</p><p>The following figure shows the new one-click projection sub-menu, which you can access by right-clicking cell in the tree&#x2F;table view.</p><p><img src="/blog/img/v8-one-click-projection.png" alt="One-click projection"></p><p>The following figure shows the field chooser, and you can either include &#x2F; exclude the selected fields, or reorder the fields by dragging and dropping them.</p><p><img src="/blog/img/v8-one-click-projection-fields-chooser.png" alt="One-click projection Fields Chooser"></p><h2><span id="display-datetime-in">Display DateTime in</span></h2><p>The date-time display format now supports <em><strong>time zone offset</strong></em> and <em><strong>relative time</strong></em>. By default, the relative time is visible, and you can switch through the settings menu on the toolbar.</p><p><img src="/blog/img/v8-datetime-display-in.png" alt="Display Datetime in ..."></p><h2><span id="display-binary-buffer-encoding-in">Display Binary Buffer Encoding in</span></h2><p>In this version, we have added several character encodings such as utf8, ascii, ucs2, and so on, which you can set in the settings sub-menu. Tooltips for binary fields also support this encoding setting.</p><p><img src="/blog/img/v8-display-binary-in.png" alt="Display Binary Buffer Encoding in ..."></p><h2><span id="tooltip">Tooltip</span></h2><p>We continue to enhance our view of different types of data, and in this release, you can preview the image URI in the tooltip, as well as the data URI of the image type (eg. data:image&#x2F;png).</p><p><img src="/blog/img/v8-tooltip-image-uri.png" alt="Tooltip for image uri"></p><p>The column headings of the table view also add tooltips for displaying BSON data types</p><p><img src="/blog/img/v8-table-view-column-header-tooltip.png" alt="Tooltip for column headers"></p><h2><span id="tree-view-new-filter-row">Tree View (new Filter Row)</span></h2><p>The new filter row allows end-users to filter tree view data by typing text directly into the row. The filter row is scoped <em><strong>only to data on the current page</strong></em>. </p><p>To toggle the filter row at the top of the tree view, press <code>CTRL+F</code>. This feature is also applicable to table view.</p><p><img src="/blog/img/v8-tree-view-filter-row.png" alt="Tree view filter Row"> </p><h2><span id="json-view-new-relaxed-ejson-format">JSON View (new Relaxed EJSON format)</span></h2><p>A new <a href="https://www.mongodb.com/docs/upcoming/reference/mongodb-extended-json/#type-representations">relaxed EJSON</a> format has been added to the JSON view. The Relaxed mode format is more concise and closer to ordinary JSON, but does not represent all the type information such as the specific byte size of number fields.</p><p><img src="/blog/img/v8-canonical-vs-relaxed-format.png" alt="Canonical format VS Relaxed format"> </p><p><img src="/blog/img/v8-json-view-relaxed-mode.png" alt="JSON view relaxed EJSON"> </p><h1><span id="import-data">Import Data</span></h1><p>In this version, we have added the preview function of collection import, and you can specify the bson data type of the imported field when importing the CSV file. Developers can make more complex customized imports based on the generated code, then save it as a script file, or even add automatic tasks.</p><p>The following figure shows the GUI for importing csv files. To exclude a field from the CSV file, uncheck the check box next to the field name.  To select the BSON type of field, use the drop-down list below the field name.</p><p><img src="/blog/img/v8-cvs-imports.png" alt="CSV import"></p><h1><span id="export-data">Export Data</span></h1><p>In this version, we have added the preview function of collection export (up to 100 records), and you can use drag and drop to reorder the exported fields. <a href="https://www.mongodb.com/docs/upcoming/reference/mongodb-extended-json">The relaxed mode</a> option for EJSON export is also added.</p><p><img src="/blog/img/v8-ejson-export.png" alt="export EJSON"></p><h1><span id="test-data-generator">Test Data Generator</span></h1><p>This version of the test data generator has been greatly improved.</p><ul><li>Better guess the faker.js method of creating fake data based on the existing sample data.</li><li><strong>Support positional $ operator</strong> (arrayOfNumbers.$ and arrayOfObjects.$.field)</li><li>Added GUI for locale selection</li><li>The <a href="https://github.com/marak/Faker.js/">faker.js</a> module is updated to the 6.x version, and a large number of API methods are added to generate different types of fake data.</li></ul><p>The following figure shows the main interface of the test Data Generator. You can access this tool from the DataGen button on the main toolbar or from the main menu Tools- &gt; Test Data Generator</p><p><img src="/blog/img/v8-test-data-generator.png" alt="Test data generator"></p><p>The following is an example of a generated creation of 1M fake people data.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//faker.js - generate massive amounts of fake data</span></span><br><span class="line"><span class="comment">//usage: https://v6.fakerjs.dev/</span></span><br><span class="line">faker.<span class="property">locale</span> = <span class="string">&quot;es&quot;</span>; <span class="comment">// en|es|de|fr|it|ja|ko|ru|zh_CN, more https://v6.fakerjs.dev/api/localization.html</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">isRandomBlank</span>(<span class="params">blankWeight</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="title class_">Math</span>.<span class="title function_">random</span>() * <span class="number">100</span> &lt;= blankWeight;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="variable constant_">COLLECTION</span> = <span class="string">&quot;testTypes&quot;</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="variable constant_">BATCH_COUNT</span> = <span class="number">1000</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="variable constant_">STEP_LEN</span> = <span class="number">1000</span>; <span class="comment">//total 1000 * 1000 = 1000000</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; <span class="variable constant_">STEP_LEN</span>; i++) &#123;</span><br><span class="line">    db.<span class="title function_">getCollection</span>(<span class="variable constant_">COLLECTION</span>).<span class="title function_">insertMany</span>(</span><br><span class="line">        _.<span class="title function_">times</span>(<span class="variable constant_">BATCH_COUNT</span>, <span class="function">() =&gt;</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> &#123;</span><br><span class="line">                <span class="string">&quot;string&quot;</span>: faker.<span class="property">name</span>.<span class="title function_">findName</span>(),</span><br><span class="line">                <span class="string">&quot;array-number&quot;</span>: _.<span class="title function_">range</span>(<span class="number">0</span>, _.<span class="title function_">random</span>(<span class="number">1</span>, <span class="number">5</span>)).<span class="title function_">map</span>(<span class="function">() =&gt;</span> faker.<span class="property">datatype</span>.<span class="title function_">number</span>()),</span><br><span class="line">                <span class="string">&quot;array-object&quot;</span>: _.<span class="title function_">range</span>(<span class="number">0</span>, _.<span class="title function_">random</span>(<span class="number">1</span>, <span class="number">5</span>)).<span class="title function_">map</span>(<span class="function">() =&gt;</span> &#123;</span><br><span class="line">                    <span class="keyword">return</span> &#123;</span><br><span class="line">                        <span class="attr">date</span>: faker.<span class="property">date</span>.<span class="title function_">past</span>(),</span><br><span class="line">                        <span class="attr">name</span>: faker.<span class="property">name</span>.<span class="title function_">findName</span>()</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;),</span><br><span class="line">                <span class="string">&quot;object&quot;</span>: &#123;</span><br><span class="line">                    <span class="string">&quot;city&quot;</span>: faker.<span class="property">address</span>.<span class="title function_">city</span>(),</span><br><span class="line">                    <span class="string">&quot;zipcode&quot;</span>: faker.<span class="property">address</span>.<span class="title function_">zipCode</span>()</span><br><span class="line">                &#125;,</span><br><span class="line">                <span class="string">&quot;email&quot;</span>: faker.<span class="property">internet</span>.<span class="title function_">email</span>()</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;)</span><br><span class="line">    )</span><br><span class="line"></span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(db.<span class="title function_">getName</span>() + <span class="string">&quot;.&quot;</span> + <span class="variable constant_">COLLECTION</span>, <span class="string">`<span class="subst">$&#123;(i + <span class="number">1</span>) * BATCH_COUNT&#125;</span> docs inserted`</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1><span id="schema-documentation">Schema Documentation</span></h1><p>In this version, we have added the ability to export collection schema to <a href="https://graphql.org/learn/schema/">GraphQL schema</a>, as well as the menu items to copy Mongoose Javascript&#x2F;GraphSQL Schema&#x2F;JSON directly to the clipboard.</p><p><img src="/blog/img/v8-schema-copy-items.png" alt="Schema Copy UI"></p><p>Here is an example of the generated GraphSQL schema:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Copyright 2022 NoSQLBooster All rights reserved. Generated by NoSQLBooster 8.0</span></span><br><span class="line">type <span class="title class_">Address</span> &#123;</span><br><span class="line">    <span class="attr">city</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">street</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">zip</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">state</span>: <span class="title class_">String</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">type  people &#123;</span><br><span class="line">    <span class="attr">_id</span>: <span class="variable constant_">ID</span>!,</span><br><span class="line">    <span class="attr">last_name</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">quote</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">job</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">ssn</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">address</span>: <span class="title class_">Address</span>,</span><br><span class="line">    <span class="attr">first_name</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">company_id</span>: <span class="variable constant_">ID</span>!,</span><br><span class="line">    <span class="attr">employer</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">birthday</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">email</span>: <span class="title class_">String</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Here is an example of the generated <a href="https://mongoosejs.com/docs/guide.html#schemas">Mongoose Javascript schema</a>:</p> <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Copyright 2022 NoSQLBooster All rights reserved. Generated by NoSQLBooster 8.0</span></span><br><span class="line"><span class="keyword">import</span> mongoose <span class="keyword">from</span> <span class="string">&#x27;mongoose&#x27;</span>;</span><br><span class="line"><span class="keyword">const</span> &#123; <span class="title class_">Schema</span> &#125; = mongoose;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> peopleSchema = <span class="keyword">new</span> <span class="title class_">Schema</span>(&#123;</span><br><span class="line">    <span class="attr">last_name</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">quote</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">job</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">ssn</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">address</span>: &#123;</span><br><span class="line">        <span class="attr">city</span>: <span class="title class_">String</span>,</span><br><span class="line">        <span class="attr">street</span>: <span class="title class_">String</span>,</span><br><span class="line">        <span class="attr">zip</span>: <span class="title class_">String</span>,</span><br><span class="line">        <span class="attr">state</span>: <span class="title class_">String</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">first_name</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">company_id</span>: <span class="title class_">Schema</span>.<span class="property">Types</span>.<span class="property">ObjectId</span>,</span><br><span class="line">    <span class="attr">employer</span>: <span class="title class_">String</span>,</span><br><span class="line">    <span class="attr">birthday</span>: <span class="title class_">Date</span>,</span><br><span class="line">    <span class="attr">email</span>: <span class="title class_">String</span></span><br><span class="line">&#125;, &#123; <span class="attr">collection</span>: <span class="string">&quot;people&quot;</span> &#125;);</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1><span id="minor-improvements">Minor Improvements</span></h1><h2><span id="tasks-run-script-task">Tasks - run script task</span></h2><p>In previous versions, the task to run the script had to specify a script file. In 8.0, we added an option to specify the content of the script directly. You can save the script in the editor as a task without having to save it as a file first.<br>It does not rely on local files, so it is easier to export and run on other machines.</p><p><img src="/blog/img/v8-run-task-content.png" alt="Run script task"></p><h2><span id="tab-switcher">Tab switcher</span></h2><p>When you switch tabs by <code>Ctrl+Tab</code> and <code>Ctrl+Shift+Tab</code>, the tabs are switched in the most recently used order instead of a sequential left-to-right&#x2F;right-to-left order. At the same time, a menu that includes all open tabs pops up so that you can quickly switch tabs.</p><p><img src="/blog/img/v8-tabs-switcher.png" alt="tabs switcher"></p><h2><span id="database-object-explorer-redesigned-tree-node-locator">Database object explorer - redesigned tree node locator</span></h2><p>In version 8.0, we redesigned the node locator of the object explorer to improve the lookup efficiency and the usability of the interface.</p><ul><li>Press <code>Command+F</code> to display the node locator, and press <code>Esc</code> to close it.</li></ul><p><img src="/blog/img/v8-object-tree-locator.png" alt="Database Object Locator"></p><h1><span id="miscellaneous-improvements-and-bug-fixes">Miscellaneous improvements and bug fixes</span></h1><ul><li>Upgrade MongoDB Node.js driver to 4.10.</li><li>Upgrade major dependencies electron to 11.x, Node v12.8, and V8 v8.7.</li><li>Add optional &quot;@mongodb-js&#x2F;zstd&quot; module to support zstd compression.</li><li>Redesign &quot;New connection&quot; dialog, add &quot;create deployment&quot; sub menu.</li><li>Unlock some of the code IntelliSense to the free version.</li><li>Update the type definition of mongosh and the 3rd dependent library to the latest.</li><li>Code Editor - formats the selected code by <code>Alt+Shift+F</code>, or the entire code if the selected code is empty.</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-802">Version 8.0.2</span></h2><ul><li>Improved, add more zoom out&#x2F;in factors. Menu-&gt; View -&gt; Zoom Out&#x2F;In...</li><li>Fixed, an formatting error in the ops(number of operations that used the index) field of tooltips for collection indexes.</li><li>Fixed, a bug in the test data generation tool, missing a parameter in the gender field of predefined user card.</li><li>Fixed, a bug in the schema tool,  if you have already generated collection&#39;s schema, should give priority to displaying the generated results when entering the schema tool UI.</li><li>Fixed, a bug in the object explorer,  when refreshing a collection node, the display status of other connection nodes should not be affected.</li></ul><h2><span id="version-803">Version 8.0.3</span></h2><ul><li>Fixed, a UI bug in the tree view where when the result row was expanded, the screen jumped back to the top of the first row.</li><li>Fixed, a UI bug where when the application switches to the foreground, the focus of the pop-up value editor always switches back to the code editor.</li></ul><h2><span id="version-804">Version 8.0.4</span></h2><ul><li>Improved,  expose the built-in Node.JS module (fs, path ...).</li></ul><h2><span id="version-805">Version 8.0.5</span></h2><ul><li>Improved, greatly improves the performance of fetching MongoDB schema data and speeds up the speed of general queries.</li><li>Improved, added &quot;(administrator)&quot; to the window title if you are launching NoSQLBooster as an administrator under Windows.</li><li>Improved, added the colored connection info in the confirmation dialog box when dropping a collection&#x2F;database.</li><li>Fixed, an error that could not read the X.509 certificate subject correctly.</li></ul><h2><span id="version-806">Version 8.0.6</span></h2><ul><li>Fixed, a serious bug that prevented cursor navigation When the data View has multiple tabs containing cursors.</li></ul><h2><span id="version-807">Version 8.0.7</span></h2><ul><li>Fixed, a regression error that prevented one-click export from being executed.</li><li>Fixed, a percentage formatting error for the schema type distribution bar.</li></ul><h2><span id="version-808">Version 8.0.8</span></h2><ul><li>Fixed, a &quot;cannot use import statement outside a module&quot; runtime error in the &quot;use NPM Packages&quot; sample.</li><li>Improved, more zoom-in factors &quot;Menu -&gt; View -&gt; Zoom Out&#x2F;In...&quot; has been added.</li><li>Improved, more detailed validation error description has been added.</li></ul><h2><span id="version-809">Version 8.0.9</span></h2><ul><li>Fixed, an unexpected &quot;SyntaxError: Unexpected token &#39;&lt;&#39; in JSON at position xxxxx&quot; error when importing mongoexport json file.</li><li>Fixed, an &quot;command not found&quot; error that the full path of nbcli is incorrect under macos 13</li><li>Fixed, an &quot;undefined value&quot; exception when adding the currently opened &quot;query file&quot; to &quot;Favorites&quot; (Menu -&gt; Favorites).</li><li>Fixed, a bug that when pressing CMD+Q to quit the application under macos, the unsaved file prompt did not pop up.</li><li>Fixed, a bug that the visual explain function does not work under AWS DocumentDB.</li></ul><h2><span id="version-8010">Version 8.0.10</span></h2><ul><li>Fixed, a bug in export to SQL where the last three digits were incorrectly truncated when exporting int64 fields.</li><li>Improved, SQL Equi join，allows swapping field positions at both ends of the comparison.</li></ul><h2><span id="version-8011">Version 8.0.11</span></h2><ul><li>Improved, the UI option for entering profile (~&#x2F;.aws&#x2F;credentials) has been added to the configuration interface of MongoDB-AWS authentication.</li><li>Fixed, a bug in &quot;rename database&quot; script template.</li><li>Fixed, an issue where &quot;tasks.json&quot; was emptied when running multiple tasks successively on the command line.</li></ul><h2><span id="version-8012">Version 8.0.12</span></h2><ul><li>Improved, MongoDB AWS auth, the UI option for SSO (AWS Single Sign-On) option has been added to the configuration interface.</li></ul><h2><span id="version-8013">Version 8.0.13</span></h2><ul><li>Fixed, a bug where pressing the &quot;del&quot; key in Table view did not work.</li><li>Fixed, a bug where importing the exported connections JSON file sometimes failed when the current connection list is empty.</li></ul><h2><span id="version-8014">Version 8.0.14</span></h2><ul><li>Fixed, copy collection - a type conversion bug where double value 1.0 was automatically converted to a int32 1 when copying data</li><li>Fixed, json view - a display error for arrays of string type</li></ul><h2><span id="version-8015">Version 8.0.15</span></h2><ul><li>Improved, Support for connecting to MongoDB Server 7.0.x.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/mongosh/">mongosh</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB-6/">MongoDB 6</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/shell/">shell</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB-operator/">MongoDB operator</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/One-click-filtering/">One-click filtering</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/data-view/">data view</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Tooltip/">Tooltip</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/datetime/">datetime</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/test-data-generator/">test data generator</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/import/">import</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/export/">export</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/schema/">schema</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-80/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 7.1 Released!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-71/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-71/</guid>
      <pubDate>Wed, 01 Jun 2022 01:20:00 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 7.1 today. This version includes MongoDB Node.js driver Upgrade from 4.1 to 4.4, Data types compatible with mongosh, MSSQL connection string,  More font options, ReplicaSet Member Tags along with some useful improvements and bugfix.&lt;/p&gt;
&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#nodejs-driver-upgrade-from-41-to-44&quot;&gt;Node.JS Driver Upgrade From 4.1 to 4.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#data-types-compatible-with-mongosh&quot;&gt;Data Types Compatible With mongosh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#more-fonts-and-font-ligatures-support&quot;&gt;More Fonts and Font Ligatures Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#display-tags-in-the-rs-member-selector&quot;&gt;Display Tags in the Rs Member Selector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#support-mssql-classic-connection-string&quot;&gt;Support MSSQL Classic Connection String&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-improvements&quot;&gt;Other Improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#log-windows-filter-row-and-sorting&quot;&gt;Log Windows - Filter Row and Sorting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tooltip-showdelay-1s&quot;&gt;Tooltip - ShowDelay 1s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#minor-improvements-and-bugfix&quot;&gt;Minor Improvements and Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#patch-releases&quot;&gt;Patch Releases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-711&quot;&gt;Version 7.1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-712&quot;&gt;Version 7.1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-713&quot;&gt;Version 7.1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-715&quot;&gt;Version 7.1.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-716&quot;&gt;Version 7.1.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-717&quot;&gt;Version 7.1.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-718-7110&quot;&gt;Version 7.1.8-7.1.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7111&quot;&gt;Version 7.1.11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7112&quot;&gt;Version 7.1.12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7113&quot;&gt;Version 7.1.13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7114-7115&quot;&gt;Version 7.1.14-7.1.15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7116&quot;&gt;Version 7.1.16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7117&quot;&gt;Version 7.1.17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7118&quot;&gt;Version 7.1.18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7119&quot;&gt;Version 7.1.19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7120&quot;&gt;Version 7.1.20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7121&quot;&gt;Version 7.1.21&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h1 id=&quot;Node-JS-Driver-Upgrade-From-4-1-to-4-4&quot;&gt;&lt;a href=&quot;#Node-JS-Driver-Upgrade-From-4-1-to-4-4&quot; class=&quot;headerlink&quot; title=&quot;Node.JS Driver Upgrade From 4.1 to 4.4&quot;&gt;&lt;/a&gt;Node.JS Driver Upgrade From 4.1 to 4.4&lt;/h1&gt;&lt;p&gt;MongoDB Node.js driver upgrade from 4.1 to 4.4 in NoSQLBooster 7.1. And, we have updated the typing definition of mongoshell methods to synchronize to the latest version of MongoDB. While upgrading to the latest MongoDB Node.js driver, we still maintain support for the old version of MongoDB server. &lt;strong&gt;NoSQLBooster supports MongoDB server versions 2.6 to 5.3&lt;/strong&gt;.&lt;/p&gt;
&lt;h1 id=&quot;Data-Types-Compatible-With-mongosh&quot;&gt;&lt;a href=&quot;#Data-Types-Compatible-With-mongosh&quot; class=&quot;headerlink&quot; title=&quot;Data Types Compatible With mongosh&quot;&gt;&lt;/a&gt;Data Types Compatible With mongosh&lt;/h1&gt;&lt;p&gt;NoSQLBooster 7.1 adds Int32(NumberInt), Long(NumberLong), Decimal128(NumberDecimal) data types to be compatible with mongosh.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title class_&quot;&gt;Int32&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;//= NumberInt(100) in legacy mongoshell&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title class_&quot;&gt;Long&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;123&amp;quot;&lt;/span&gt;);  &lt;span class=&quot;comment&quot;&gt;//NumberLong(&amp;quot;123&amp;quot;) in legacy mongoshell&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title class_&quot;&gt;Decimal128&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;-1&amp;quot;&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;//NumberDecimal(&amp;quot;-1&amp;quot;) in legacy mongoshell&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h1 id=&quot;More-Fonts-and-Font-Ligatures-Support&quot;&gt;&lt;a href=&quot;#More-Fonts-and-Font-Ligatures-Support&quot; class=&quot;headerlink&quot; title=&quot;More Fonts and Font Ligatures Support&quot;&gt;&lt;/a&gt;More Fonts and Font Ligatures Support&lt;/h1&gt;&lt;p&gt;In 7.1, we have four built-in editor fonts (&lt;strong&gt;Hack, Fira Code, JetBrain mono and Source Code Pro&lt;/strong&gt;) to choose from.  Fira Code and JetBrain Mono support font ligatures.&lt;/p&gt;
&lt;p&gt;Use the editor&amp;#39;s right-click menu to set the font, and you can also switch the editor font through the main menu.&lt;br&gt;To use it, Click  Menu -&amp;gt; Options -&amp;gt; Editor Settings -&amp;gt; Font.&lt;/p&gt;
&lt;p&gt;Left: &lt;em&gt;&lt;strong&gt;ligatures&lt;/strong&gt;&lt;/em&gt; as rendered in Fira Code. Right: same character sequences &lt;em&gt;&lt;strong&gt;without ligatures&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/font-fira-code-ligatures.png&quot; alt=&quot;Font Fira Code&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Display-Tags-in-the-Rs-Member-Selector&quot;&gt;&lt;a href=&quot;#Display-Tags-in-the-Rs-Member-Selector&quot; class=&quot;headerlink&quot; title=&quot;Display Tags in the Rs Member Selector&quot;&gt;&lt;/a&gt;Display Tags in the Rs Member Selector&lt;/h1&gt;&lt;p&gt;You can directly connect and switch members of the replica set within the script editor.  MongoDB Atlas clusters are configured with pre-defined replica set tags for different member types in the cluster. In 7.1, the tags for the member are displayed in the member set selector to make it easier to select a specific member by member type and region. Note: current user need to have permission to execute &lt;a href=&quot;https://docs.mongodb.com/manual/reference/privilege-actions/#mongodb-authaction-&quot;&gt;replSetGetStatus&lt;/a&gt; command.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/rs-member-selector-tags.png&quot; alt=&quot;RS Member Selector Tags&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Support-MSSQL-Classic-Connection-String&quot;&gt;&lt;a href=&quot;#Support-MSSQL-Classic-Connection-String&quot; class=&quot;headerlink&quot; title=&quot;Support MSSQL Classic Connection String&quot;&gt;&lt;/a&gt;Support MSSQL Classic Connection String&lt;/h1&gt;&lt;p&gt;When importing data from a MSSQL database, two formats of connection string are supported. Both formats need to start with the string &amp;quot;mssql:&amp;#x2F;&amp;#x2F;&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classic Connection String&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mssql://Server=localhost,1433;Database=database;User Id=username;Password=password;Encrypt=true&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mssql://Driver=msnodesqlv8;Server=(local)&#92;INSTANCE;Database=database;UID=DOMAIN&#92;username;PWD=password;Encrypt=true&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;Connection String URI&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mssql://username:password@localhost:1433/database?encrypt=true&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mssql://username:password@localhost/INSTANCE/database?encrypt=true&amp;amp;domain=DOMAIN&amp;amp;driver=msnodesqlv8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h1 id=&quot;Other-Improvements&quot;&gt;&lt;a href=&quot;#Other-Improvements&quot; class=&quot;headerlink&quot; title=&quot;Other Improvements&quot;&gt;&lt;/a&gt;Other Improvements&lt;/h1&gt;&lt;h2 id=&quot;Log-Windows-Filter-Row-and-Sorting&quot;&gt;&lt;a href=&quot;#Log-Windows-Filter-Row-and-Sorting&quot; class=&quot;headerlink&quot; title=&quot;Log Windows - Filter Row and Sorting&quot;&gt;&lt;/a&gt;Log Windows - Filter Row and Sorting&lt;/h2&gt;&lt;p&gt;NoSQLBooster&amp;#39;s client-side user query log window is a very useful function for diagnosing query problems. In 7.1, we enhanced the UI function of the log window, adding sorting and filter row.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/log-window-filter-row.png&quot; alt=&quot;Log Window with Filter Row&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Tooltip-ShowDelay-1s&quot;&gt;&lt;a href=&quot;#Tooltip-ShowDelay-1s&quot; class=&quot;headerlink&quot; title=&quot;Tooltip - ShowDelay 1s&quot;&gt;&lt;/a&gt;Tooltip - ShowDelay 1s&lt;/h2&gt;&lt;p&gt;Displaying tooltips too frequently is really a bit annoying. In 7.1, we increased the display delay of tooltip and menubutton &lt;em&gt;&lt;strong&gt;from 100ms to 1000ms&lt;/strong&gt;&lt;/em&gt;, hoping to partially solve this issue.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 7.1 today. This version includes MongoDB Node.js driver Upgrade from 4.1 to 4.4, Data types compatible with mongosh, MSSQL connection string,  More font options, ReplicaSet Member Tags along with some useful improvements and bugfix.</p><!-- toc --><ul><li><a href="#nodejs-driver-upgrade-from-41-to-44">Node.JS Driver Upgrade From 4.1 to 4.4</a></li><li><a href="#data-types-compatible-with-mongosh">Data Types Compatible With mongosh</a></li><li><a href="#more-fonts-and-font-ligatures-support">More Fonts and Font Ligatures Support</a></li><li><a href="#display-tags-in-the-rs-member-selector">Display Tags in the Rs Member Selector</a></li><li><a href="#support-mssql-classic-connection-string">Support MSSQL Classic Connection String</a></li><li><a href="#other-improvements">Other Improvements</a><ul><li><a href="#log-windows-filter-row-and-sorting">Log Windows - Filter Row and Sorting</a></li><li><a href="#tooltip-showdelay-1s">Tooltip - ShowDelay 1s</a></li><li><a href="#minor-improvements-and-bugfix">Minor Improvements and Bugfix</a></li></ul></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-711">Version 7.1.1</a></li><li><a href="#version-712">Version 7.1.2</a></li><li><a href="#version-713">Version 7.1.3</a></li><li><a href="#version-715">Version 7.1.5</a></li><li><a href="#version-716">Version 7.1.6</a></li><li><a href="#version-717">Version 7.1.7</a></li><li><a href="#version-718-7110">Version 7.1.8-7.1.10</a></li><li><a href="#version-7111">Version 7.1.11</a></li><li><a href="#version-7112">Version 7.1.12</a></li><li><a href="#version-7113">Version 7.1.13</a></li><li><a href="#version-7114-7115">Version 7.1.14-7.1.15</a></li><li><a href="#version-7116">Version 7.1.16</a></li><li><a href="#version-7117">Version 7.1.17</a></li><li><a href="#version-7118">Version 7.1.18</a></li><li><a href="#version-7119">Version 7.1.19</a></li><li><a href="#version-7120">Version 7.1.20</a></li><li><a href="#version-7121">Version 7.1.21</a></li></ul></li></ul><!-- tocstop --><h1><span id="nodejs-driver-upgrade-from-41-to-44">Node.JS Driver Upgrade From 4.1 to 4.4</span></h1><p>MongoDB Node.js driver upgrade from 4.1 to 4.4 in NoSQLBooster 7.1. And, we have updated the typing definition of mongoshell methods to synchronize to the latest version of MongoDB. While upgrading to the latest MongoDB Node.js driver, we still maintain support for the old version of MongoDB server. <strong>NoSQLBooster supports MongoDB server versions 2.6 to 5.3</strong>.</p><h1><span id="data-types-compatible-with-mongosh">Data Types Compatible With mongosh</span></h1><p>NoSQLBooster 7.1 adds Int32(NumberInt), Long(NumberLong), Decimal128(NumberDecimal) data types to be compatible with mongosh.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="title class_">Int32</span>(<span class="number">1</span>); <span class="comment">//= NumberInt(100) in legacy mongoshell</span></span><br><span class="line"></span><br><span class="line"><span class="title class_">Long</span>(<span class="string">&quot;123&quot;</span>);  <span class="comment">//NumberLong(&quot;123&quot;) in legacy mongoshell</span></span><br><span class="line"></span><br><span class="line"><span class="title class_">Decimal128</span>(<span class="string">&quot;-1&quot;</span>); <span class="comment">//NumberDecimal(&quot;-1&quot;) in legacy mongoshell</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h1><span id="more-fonts-and-font-ligatures-support">More Fonts and Font Ligatures Support</span></h1><p>In 7.1, we have four built-in editor fonts (<strong>Hack, Fira Code, JetBrain mono and Source Code Pro</strong>) to choose from.  Fira Code and JetBrain Mono support font ligatures.</p><p>Use the editor&#39;s right-click menu to set the font, and you can also switch the editor font through the main menu.<br>To use it, Click  Menu -&gt; Options -&gt; Editor Settings -&gt; Font.</p><p>Left: <em><strong>ligatures</strong></em> as rendered in Fira Code. Right: same character sequences <em><strong>without ligatures</strong></em>.</p><p><img src="/blog/img/font-fira-code-ligatures.png" alt="Font Fira Code"></p><h1><span id="display-tags-in-the-rs-member-selector">Display Tags in the Rs Member Selector</span></h1><p>You can directly connect and switch members of the replica set within the script editor.  MongoDB Atlas clusters are configured with pre-defined replica set tags for different member types in the cluster. In 7.1, the tags for the member are displayed in the member set selector to make it easier to select a specific member by member type and region. Note: current user need to have permission to execute <a href="https://docs.mongodb.com/manual/reference/privilege-actions/#mongodb-authaction-">replSetGetStatus</a> command.</p><p><img src="/blog/img/rs-member-selector-tags.png" alt="RS Member Selector Tags"></p><h1><span id="support-mssql-classic-connection-string">Support MSSQL Classic Connection String</span></h1><p>When importing data from a MSSQL database, two formats of connection string are supported. Both formats need to start with the string &quot;mssql:&#x2F;&#x2F;&quot;</p><ul><li>Classic Connection String</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mssql://Server=localhost,1433;Database=database;User Id=username;Password=password;Encrypt=true</span><br><span class="line">mssql://Driver=msnodesqlv8;Server=(local)\INSTANCE;Database=database;UID=DOMAIN\username;PWD=password;Encrypt=true</span><br></pre></td></tr></table></figure><ul><li>Connection String URI</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mssql://username:password@localhost:1433/database?encrypt=true</span><br><span class="line">mssql://username:password@localhost/INSTANCE/database?encrypt=true&amp;domain=DOMAIN&amp;driver=msnodesqlv8</span><br></pre></td></tr></table></figure><h1><span id="other-improvements">Other Improvements</span></h1><h2><span id="log-windows-filter-row-and-sorting">Log Windows - Filter Row and Sorting</span></h2><p>NoSQLBooster&#39;s client-side user query log window is a very useful function for diagnosing query problems. In 7.1, we enhanced the UI function of the log window, adding sorting and filter row.</p><p><img src="/blog/img/log-window-filter-row.png" alt="Log Window with Filter Row"></p><h2><span id="tooltip-showdelay-1s">Tooltip - ShowDelay 1s</span></h2><p>Displaying tooltips too frequently is really a bit annoying. In 7.1, we increased the display delay of tooltip and menubutton <em><strong>from 100ms to 1000ms</strong></em>, hoping to partially solve this issue.</p><span id="more"></span><h2><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h2><ul><li>Fixed, Incorrect result value of NumberLong(-1)</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-711">Version 7.1.1</span></h2><ul><li>Fixed, an disable error that does not allow a count query is executed against a read-only connection with read preference type is &quot;secondary&quot;.</li><li>Fixed，a bug where the Mongo&#39;Double&#39; type was not retained during editing &#x2F; saving when editing a document using Ctrl-E.</li></ul><h2><span id="version-712">Version 7.1.2</span></h2><ul><li>Fixed, an &quot;font not found&quot; error when generating a PDF document in Schema explorer.</li></ul><h2><span id="version-713">Version 7.1.3</span></h2><ul><li>Improved, allow to connect to MongoDB 6 RC.</li><li>Improved, tweak the CSS style of the currently selected tab.</li></ul><h2><span id="version-715">Version 7.1.5</span></h2><ul><li>Improved, the multi-level sub-field &quot;a.b.c&quot; in the SQL query do not need to be quoted. e.g. SELECT * FROM users JOIN receipts ON users.address._id &#x3D; <strong>receipts.address.id</strong> . The field <strong>receipts.address.id</strong> no longer has to quoted with &quot;receipts.address.id&quot;.</li><li>Improved, support for SQL grouping of multiple fields. e.g. SELECT firstN(input&#x3D;[playerId, score], n&#x3D;3) as firstThreeScores FROM gamescores where gameId&#x3D;&#39;G1&#39; <strong>group by gameId as _id, firstThreeScores</strong>.</li></ul><h2><span id="version-716">Version 7.1.6</span></h2><ul><li>Fixed, a bug where the json view displayed blank space when the result value of the script running was a boolean value.</li></ul><h2><span id="version-717">Version 7.1.7</span></h2><ul><li>Fixed, an import error. When importing fields of type uuid, subtype may be mistakenly written to 00 instead of 04.</li><li>Fixed, an activation error. Due to permission problems, the machine code may be empty.</li></ul><h2><span id="version-718-7110">Version 7.1.8-7.1.10</span></h2><ul><li>Fixed, a kerberos authentication error “AcquireCredentialsHandle: The token supplied to the function is invalid” in windows system.</li><li>Fixed, the AppImage package does not work properly and causes a &quot;software-induced connection abort&quot; error on ubuntu 22 systems.</li><li>Fixed, an export error that threw an &quot;Cannot read property &#39;toString&#39; of undefined&quot; error when the query string includes the &quot;$function&quot; operator.</li></ul><h2><span id="version-7111">Version 7.1.11</span></h2><ul><li>Improved, display the length of the selected text in the bottom status bar.</li><li>Fixed, the toString method of MinKey and MaxKey.</li></ul><h2><span id="version-7112">Version 7.1.12</span></h2><ul><li>Improved, support snappy compression in the connection options.</li><li>Fixed, a date formatting error in the visual builder.</li><li>Fixed, a bug in script generation that converting field type of array object.</li></ul><h2><span id="version-7113">Version 7.1.13</span></h2><ul><li>Fixed, an error where searching in the object tree did not work due to insufficient permissions in the config database.</li><li>Fixed, an application termination exception in command line mode in MacOS system.</li><li>Fixed, an aggregate method typing definition error.</li></ul><h2><span id="version-7114-7115">Version 7.1.14-7.1.15</span></h2><ul><li>Improved, native support for AWS DocumentDB (MongoDB 4.0).</li><li>Improved, added &quot;Create Collection&quot; submenu to the collection node of the object explorer right-click menu.</li><li>Improved, AWS_SESSION_TOKEN UI option has been added and some minor UI enhancements made to the connection configuration dialog.</li><li>Improved, tree view, double-click the _ id field to open the document viewer.</li><li>Improved, added &quot;Collection@Connection&quot; and &quot;Connection&quot; tab name format templates. Menu-&gt;Options-&gt;Editor Settings-&gt;Editor Tab Name Format.</li><li>Fixed, an error occurs when renaming an inactive tab, which always results in renaming the currently active tab.</li></ul><h2><span id="version-7116">Version 7.1.16</span></h2><ul><li>Fixed, a command palette shortcut UI issue, Keyboard shortcuts overflow the main command palette pop-up, also their position seem to be fixed as they don&#39;t scroll together with the window content. </li><li>Fixed, a number type error of getting cursor data caused by the promoteValues option.</li><li>improved, remember the export format (json, csv, excel...) that last performed the export function.</li></ul><h2><span id="version-7117">Version 7.1.17</span></h2><ul><li><em><strong>Changed, When the selected text is not empty, pressing F5&#x2F;F6 to execute the script runs the selected script instead of the entire script.</strong></em></li><li>Improved, allows automatic refresh of scripts that return a non-cursor object, adding an automatic refresh time option of 60s.</li><li>Improved, Query Builder -  allow comparison operators(lt, lte, gt, gte) to apply to any data type.</li><li>Fixed, allows SSH private key files with non-(.pem, .ppk) extensions to be selected.</li><li>Fixed, several broken links in the application.</li></ul><h2><span id="version-7118">Version 7.1.18</span></h2><ul><li>Improved, Support for connecting to MongoDB Server 7.0.x.</li><li>Improved, Visual explain plan supports slot based query execution (explainVersion:2).</li></ul><h2><span id="version-7119">Version 7.1.19</span></h2><ul><li>Fixed, a bug where console.log data was out of order when importing JSON file to collection.</li></ul><h2><span id="version-7120">Version 7.1.20</span></h2><ul><li>Fixed, an error where the license information in the status bar was displayed incorrectly.</li></ul><h2><span id="version-7121">Version 7.1.21</span></h2><ul><li>Fixed, an errors array undefined bug that was reported when copying a collection.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL/">SQL</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB-5/">MongoDB 5</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/mongosh/">mongosh</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/font/">font</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-71/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 7.0 Is Now Available! MongoDB Script Debugger</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-70/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-70/</guid>
      <pubDate>Tue, 12 Oct 2021 02:00:01 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we are extremely pleased to announce the release of NoSQLBooster 7.0. It brings a number of new features to increase MongoDB&amp;#39;ers productivity, MongoDB script debugger, official support for MongoDB 5.0, replica set members drop-down, collection re-schema tool, one-click grouping by date, task email notification, better fake data generator and more. &lt;/p&gt;
&lt;p&gt;if you want to try NoSQLBooster 7.0 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 7.0 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free edition is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 7.0 with a light theme.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v7-main-interface-light.png&quot; alt=&quot;Main interface in light&quot;&gt; &lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 7.0 with a dark theme.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v7-main-interface-dark.png&quot; alt=&quot;Main interface in dark&quot;&gt; &lt;/p&gt;
&lt;p&gt;Let’s dive in and get an overview of what’s coming in NoSQLBooster 7.0!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h1 id=&quot;What-s-new&quot;&gt;&lt;a href=&quot;#What-s-new&quot; class=&quot;headerlink&quot; title=&quot;What&amp;#39;s new?&quot;&gt;&lt;/a&gt;What&amp;#39;s new?&lt;/h1&gt;&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-script-debugger-unique-feature&quot;&gt;MongoDB script debugger (unique feature)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#replica-set-members-drop-down-list&quot;&gt;Replica set members drop-down list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#collection-re-schema-tool&quot;&gt;Collection re-schema tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-50-support&quot;&gt;MongoDB 5.0 support&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#new-code-templates-for-mongodb-50&quot;&gt;New Code templates for MongoDB 5.0&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#createtimeseriescollection&quot;&gt;createTimeSeriesCollection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#setwindowfields-chain-method&quot;&gt;setWindowFields chain method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#new-date-operators-in-sql&quot;&gt;New date operators in SQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#task-email-notification&quot;&gt;Task email notification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#script-editor-improvements&quot;&gt;Script Editor Improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#advanced-code-complete&quot;&gt;Advanced code-complete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#editor-themes&quot;&gt;Editor themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#change-editor-font-size&quot;&gt;Change Editor font size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#switch-rs-member-within-the-editor&quot;&gt;Switch rs member within the editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#send-to-external-tool&quot;&gt;Send to external tool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#results-tabs-and-data-viewer-improvements&quot;&gt;Results tabs and data viewer improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#one-click-groupingfiltering-of-date-fields&quot;&gt;One-click grouping&amp;#x2F;filtering of date fields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#one-click-grouping-of-embedded-array-fields&quot;&gt;One-click grouping of embedded array fields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#new-json-view-format-plain-json&quot;&gt;New JSON view format (plain JSON)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#navigation-bar-and-automatic-refresh-of-document-viewer&quot;&gt;Navigation bar and automatic refresh of document viewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#faster-tab-switching-and-tab-switcher&quot;&gt;Faster tab switching and tab switcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#rename-tab-title&quot;&gt;Rename tab title&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#exportimport-connections-and-application-configuration&quot;&gt;Export&amp;#x2F;Import connections and application configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#support-for-more-export-formats-xlsb-txt-and-html&quot;&gt;Support for more export formats (.xlsb, .txt and .html)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-notable-improvements&quot;&gt;Other notable improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#better-fake-data-generator&quot;&gt;Better fake data generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#more-datetime-field-display-format&quot;&gt;More datetime field display format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#set-comments-for-any-database-objects&quot;&gt;Set comments for any database objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#new-query-code-generator-java-use-builders&quot;&gt;New query code generator (Java Use Builders)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#open-mongoshell-here-prefer-mongosh-to-mongo-shell&quot;&gt;Open MongoShell here (prefer mongosh to mongo shell)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#last-accessed-field-in-the-connections-dialog&quot;&gt;Last accessed field in the connections dialog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#breaking-changes&quot;&gt;Breaking Changes&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#numeric-types&quot;&gt;Numeric Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#shortcuts&quot;&gt;Shortcuts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#miscellaneous-improvements-and-bug-fixes&quot;&gt;Miscellaneous improvements and bug fixes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#patch-releases&quot;&gt;Patch Releases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-702&quot;&gt;Version 7.0.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-703&quot;&gt;Version 7.0.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-704&quot;&gt;Version 7.0.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-705&quot;&gt;Version 7.0.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-706&quot;&gt;Version 7.0.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-707&quot;&gt;Version 7.0.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-708&quot;&gt;Version 7.0.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-709&quot;&gt;Version 7.0.9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7010&quot;&gt;Version 7.0.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-7011&quot;&gt;Version 7.0.11&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h1 id=&quot;MongoDB-script-debugger-unique-feature&quot;&gt;&lt;a href=&quot;#MongoDB-script-debugger-unique-feature&quot; class=&quot;headerlink&quot; title=&quot;MongoDB script debugger (unique feature)&quot;&gt;&lt;/a&gt;MongoDB script debugger (unique feature)&lt;/h1&gt;&lt;p&gt;Still debugging your MongoDB script with print statements? Now, you can use NoSQLBooster&amp;#39;s built-in debugging capabilities to set breakpoints and step through code.&lt;/p&gt;
&lt;p&gt;To start debugging, click the editor&amp;#39;s text margin to set a breakpoint &lt;code&gt;F9&lt;/code&gt;, and run with debugger &lt;code&gt;F5&lt;/code&gt;. When your breakpoint is hit, you can explore the call stack, watch and edit variables, and interact directly with the debugger.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/debugger-with-breakpoints.png&quot; alt=&quot;Debugging with Breakpoints&quot;&gt;&lt;/p&gt;
&lt;p&gt;Due to the introduction of the debugger, some keyboard shortcuts have been adjusted, and you can view the bound shortcuts through the button&amp;#39;s tooltip.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;F5&lt;/code&gt; to start debugging, &lt;code&gt;CTRL+Enter|CTRL+F5&lt;/code&gt; to run without debugging.  &lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;F6&lt;/code&gt; to Run Selected Text&amp;#x2F;Current Statement. &lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;error-message&quot;&gt;&lt;em&gt;&lt;strong&gt;Unlike previous versions, click the &amp;quot;Run&amp;quot; button or press CTRL+ENTER to always run the entire script even if you select some of the scripts.&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;Replica-set-members-drop-down-list&quot;&gt;&lt;a href=&quot;#Replica-set-members-drop-down-list&quot; class=&quot;headerlink&quot; title=&quot;Replica set members drop-down list&quot;&gt;&lt;/a&gt;Replica set members drop-down list&lt;/h1&gt;&lt;p&gt;In many panels, we have added a replica set members selector that allows you to switch between the members of the replica set in the interface. This is especially convenient for monitoring tools, and many times you want to drill down to a rs member to see the details.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/rs-members-dropdown.png&quot; alt=&quot;Replica set members drop-down list&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Collection-re-schema-tool&quot;&gt;&lt;a href=&quot;#Collection-re-schema-tool&quot; class=&quot;headerlink&quot; title=&quot;Collection re-schema tool&quot;&gt;&lt;/a&gt;Collection re-schema tool&lt;/h1&gt;&lt;p&gt;The new re-schema tool provides a GUI for updating the MongoDB collection schema. Like other tools provided by NoSQLBooster, it is essentially a code generation tool that helps you generate code to update the collection with a few clicks, and then you can use the generated code as a basis for more complex programming, then save it as a script file, or even add automated tasks.&lt;/p&gt;
&lt;p&gt;This feature uses &lt;a href=&quot;https://docs.mongodb.com/manual/reference/operator/aggregation/convert/&quot;&gt;&amp;quot;$convert&amp;quot; operator&lt;/a&gt; and &lt;a href=&quot;https://docs.mongodb.com/manual/reference/method/db.collection.update/index.html#update-method-agg-pipeline&quot;&gt;update using an aggregation pipeline&lt;/a&gt;, requires MongoDB server version 4.2 or above. We also provide a code template called &lt;code&gt;convertFieldType&lt;/code&gt; to convert individual fields, which can be used directly in the script editor.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/reschema-collection.png&quot; alt=&quot;Re-schema Collection&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;MongoDB-5-0-support&quot;&gt;&lt;a href=&quot;#MongoDB-5-0-support&quot; class=&quot;headerlink&quot; title=&quot;MongoDB 5.0 support&quot;&gt;&lt;/a&gt;MongoDB 5.0 support&lt;/h1&gt;&lt;p&gt;NoSQLBooster 7.0 upgrades the MongoDB Node.js driver to the latest 4.1 and embedded MongoDB Shell to 5.0, adding support for all the new mongo shell methods and aggregation operators of MongoDB 5.0. For more information on MongoDB 5.0 , see &lt;a href=&quot;https://docs.mongodb.com/manual/release-notes/5.0/&quot;&gt;Release Notes for MongoDB 5.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;New-Code-templates-for-MongoDB-5-0&quot;&gt;&lt;a href=&quot;#New-Code-templates-for-MongoDB-5-0&quot; class=&quot;headerlink&quot; title=&quot;New Code templates for MongoDB 5.0&quot;&gt;&lt;/a&gt;New Code templates for MongoDB 5.0&lt;/h2&gt;&lt;p&gt;This release added a few code templates for MongoDB 5.0. &lt;/p&gt;
&lt;h3 id=&quot;createTimeSeriesCollection&quot;&gt;&lt;a href=&quot;#createTimeSeriesCollection&quot; class=&quot;headerlink&quot; title=&quot;createTimeSeriesCollection&quot;&gt;&lt;/a&gt;createTimeSeriesCollection&lt;/h3&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//then press &amp;quot;tab&amp;quot; to complete code&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;createTimeSeriesCollection&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//got&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;title function_&quot;&gt;createCollection&lt;/span&gt;(&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;timeseries&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;attr&quot;&gt;timeField&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;comment&quot;&gt;//metaField: &amp;quot;metadata&amp;quot;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;comment&quot;&gt;//granularity: &amp;quot;hours&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;comment&quot;&gt;//expireAfterSeconds: 86400&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  )&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&quot;setWindowFields-chain-method&quot;&gt;&lt;a href=&quot;#setWindowFields-chain-method&quot; class=&quot;headerlink&quot; title=&quot;setWindowFields chain method&quot;&gt;&lt;/a&gt;setWindowFields chain method&lt;/h3&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;cakeSales&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insertMany&lt;/span&gt;( [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#123; &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;chocolate&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2020-05-18T14:10:30Z&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;CA&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;13&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;quantity&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;120&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#123; &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;chocolate&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2021-03-20T11:30:05Z&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;WA&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;14&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;quantity&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;140&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#123; &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;vanilla&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2021-01-11T06:31:15Z&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;CA&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;12&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;quantity&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;145&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#123; &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;vanilla&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2020-02-08T13:13:23Z&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;WA&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;13&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;quantity&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;104&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#123; &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;strawberry&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2019-05-18T16:09:01Z&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;CA&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;41&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;quantity&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;162&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#123; &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;strawberry&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Date&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2019-01-08T06:12:03Z&amp;quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;WA&amp;quot;&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;43&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;quantity&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;134&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;] )&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;cakeSales&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;().&lt;span class=&quot;property&quot;&gt;setWindowFields&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;//then press &amp;quot;tab&amp;quot; to complete code&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//got&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;cakeSales&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;().&lt;span class=&quot;title function_&quot;&gt;setWindowFields&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;partitionBy&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$state&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;sortBy&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;orderDate&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;output&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;attr&quot;&gt;cumulativeQuantityForState&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;              &lt;span class=&quot;attr&quot;&gt;$sum&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$quantity&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;              &lt;span class=&quot;attr&quot;&gt;window&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                  &lt;span class=&quot;attr&quot;&gt;documents&lt;/span&gt;: [&lt;span class=&quot;string&quot;&gt;&amp;quot;unbounded&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;current&amp;quot;&lt;/span&gt;]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;              &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)  &lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h2 id=&quot;New-date-operators-in-SQL&quot;&gt;&lt;a href=&quot;#New-date-operators-in-SQL&quot; class=&quot;headerlink&quot; title=&quot;New date operators in SQL&quot;&gt;&lt;/a&gt;New date operators in SQL&lt;/h2&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;shipping&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insertMany&lt;/span&gt;([&amp;#123;&lt;span class=&quot;attr&quot;&gt;custId&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;456&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;purchaseDate&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;ISODate&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2020-12-31&amp;quot;&lt;/span&gt;) &amp;#125;,&amp;#123; &lt;span class=&quot;attr&quot;&gt;custId&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;457&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;purchaseDate&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;ISODate&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;2021-02-28&amp;quot;&lt;/span&gt;) &amp;#125;]);&lt;span class=&quot;comment&quot;&gt;//test data&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//New date operators $dateAdd, $dateSubtract, $dateTrunc, $dateDiff, all of which can be used as SQL functions&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mb.&lt;span class=&quot;title function_&quot;&gt;runSQLQuery&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;       SELECT dateAdd(startDate=&amp;#x27;$purchaseDate&amp;#x27;, unit=&amp;#x27;day&amp;#x27;, amount=3, timezone=&amp;#x27;America/New_York&amp;#x27;) as DATE_ADD,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;              dateSubtract(startDate=&amp;#x27;$purchaseDate&amp;#x27;, unit=&amp;#x27;day&amp;#x27;, amount=3, timezone=&amp;#x27;America/New_York&amp;#x27;) as DATE_SUBTRACT,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;              dateTrunc(date=&amp;#x27;$purchaseDate&amp;#x27;, unit=&amp;#x27;week&amp;#x27;, binSize=2, timezone=&amp;#x27;America/New_York&amp;#x27;, startOfWeek=&amp;#x27;Monday&amp;#x27;) as DATE_TRUNC,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;              dateDiff(startDate=&amp;#x27;$purchaseDate&amp;#x27;, endDate=&amp;#x27;$$NOW&amp;#x27;, unit=&amp;#x27;day&amp;#x27;,  timezone=&amp;#x27;America/New_York&amp;#x27;, startOfWeek=&amp;#x27;Monday&amp;#x27;) as DATE_DIFF&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;       FROM shipping&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;       &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;`&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&amp;#123;&lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;:-&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  .&lt;span class=&quot;title function_&quot;&gt;limit&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;)  &lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;NoSQLBooster 7.0 also enhanced mouse hover for all new aggregation chain methods and aggregation Operators. In addition to method and type definitions, hover is now able to display document and example for these aggregation chain methods.&lt;/p&gt;
&lt;h1 id=&quot;Task-email-notification&quot;&gt;&lt;a href=&quot;#Task-email-notification&quot; class=&quot;headerlink&quot; title=&quot;Task email notification&quot;&gt;&lt;/a&gt;Task email notification&lt;/h1&gt;&lt;p&gt;In version 7, automated tasks added the ability to notify via e-mail. You can specify that some users receive e-mail notifications of task completion or failure. All types of tasks can be notified by email. &lt;/p&gt;
&lt;p&gt;To enable email notification,&lt;br&gt;&lt;code&gt;Menu -&amp;gt; Tools -&amp;gt; Open Tasks... -&amp;gt; Select Task -&amp;gt; Edit -&amp;gt; Mail Notification&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/task-mail-notification.png&quot; alt=&quot;Task email notification&quot;&gt;&lt;/p&gt;
&lt;p&gt;After you configure the default SMTP transport, you can also use the new code templates that starts with &lt;code&gt;sendMail&lt;/code&gt; to add the ability to send mail to the script more easily. The following is the new code templates that starts with &lt;code&gt;sendMail&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/send_mail_code_templates.png&quot; alt=&quot;Send email code templates&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Script-Editor-Improvements&quot;&gt;&lt;a href=&quot;#Script-Editor-Improvements&quot; class=&quot;headerlink&quot; title=&quot;Script Editor Improvements&quot;&gt;&lt;/a&gt;Script Editor Improvements&lt;/h1&gt;&lt;h2 id=&quot;Advanced-code-complete&quot;&gt;&lt;a href=&quot;#Advanced-code-complete&quot; class=&quot;headerlink&quot; title=&quot;Advanced code-complete&quot;&gt;&lt;/a&gt;Advanced code-complete&lt;/h2&gt;&lt;p&gt;Version 7 can intelligently match typed text to enable completion beyond single words. Take the toUpperCase method of a string as an example. In the old version, you had to type &amp;quot;toU&amp;quot; or &amp;quot;Upper&amp;quot; to find the method. In version 7, just type &amp;quot;tu&amp;quot; to locate the &amp;quot;toUpperCase&amp;quot; method. &lt;/p&gt;
&lt;p&gt;As shown in the following figure.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/code-complete-wild-match.png&quot; alt=&quot;Advanced code-complete&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Editor-themes&quot;&gt;&lt;a href=&quot;#Editor-themes&quot; class=&quot;headerlink&quot; title=&quot;Editor themes&quot;&gt;&lt;/a&gt;Editor themes&lt;/h2&gt;&lt;p&gt;Now, we have 14 built-in editor themes to choose from, and you can apply the editor&amp;#39;s theme through the editor&amp;#39;s right-click menu. It may also be set through the main menu.&lt;br&gt;&lt;code&gt;Main Menu -&amp;gt; Options -&amp;gt; Editor Settings -&amp;gt; Themes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/editor-themes.png&quot; alt=&quot;Editor themes&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Change-Editor-font-size&quot;&gt;&lt;a href=&quot;#Change-Editor-font-size&quot; class=&quot;headerlink&quot; title=&quot;Change Editor font size&quot;&gt;&lt;/a&gt;Change Editor font size&lt;/h2&gt;&lt;p&gt;The font size of the editor also be set through the main menu. &lt;code&gt;Main Menu -&amp;gt; Options -&amp;gt; Editor Settings -&amp;gt; Font size&lt;/code&gt; with a minimum of 6px and a maximum of 30px. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/editor-font-size.png&quot; alt=&quot;Editor font size&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Switch-rs-member-within-the-editor&quot;&gt;&lt;a href=&quot;#Switch-rs-member-within-the-editor&quot; class=&quot;headerlink&quot; title=&quot;Switch rs member within the editor&quot;&gt;&lt;/a&gt;Switch rs member within the editor&lt;/h2&gt;&lt;p&gt;As mentioned earlier in the replica set drop-down list, you can directly connect and switch members of the replica set within the script editor.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/rs-member-list-in-editor.png&quot; alt=&quot;Switch rs member in editor&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Send-to-external-tool&quot;&gt;&lt;a href=&quot;#Send-to-external-tool&quot; class=&quot;headerlink&quot; title=&quot;Send to external tool&quot;&gt;&lt;/a&gt;Send to external tool&lt;/h2&gt;&lt;p&gt;You can send the editor contents to the external editor associated with the system through the editor&amp;#39;s right-click menu.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/sent-to-external-editor.png&quot; alt=&quot;Send to external editor&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Results-tabs-and-data-viewer-improvements&quot;&gt;&lt;a href=&quot;#Results-tabs-and-data-viewer-improvements&quot; class=&quot;headerlink&quot; title=&quot;Results tabs and data viewer improvements&quot;&gt;&lt;/a&gt;Results tabs and data viewer improvements&lt;/h1&gt;&lt;h2 id=&quot;One-click-grouping-filtering-of-date-fields&quot;&gt;&lt;a href=&quot;#One-click-grouping-filtering-of-date-fields&quot; class=&quot;headerlink&quot; title=&quot;One-click grouping&amp;#x2F;filtering of date fields&quot;&gt;&lt;/a&gt;One-click grouping&amp;#x2F;filtering of date fields&lt;/h2&gt;&lt;p&gt;For date fields, grouping by a certain point in time is not practical. In version 7, we have enhanced grouping of date and time fields. The one-click grouping function will be grouped by day (formatted by &lt;a href=&quot;https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString&quot;&gt;$dateToString&lt;/a&gt; operator), and users also modify the generated code to support more date ranges. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/one-click-group-context-menu.png&quot; alt=&quot;One-click group context menu&quot;&gt;&lt;/p&gt;
&lt;p&gt;The $dateToString operator converts a date object to a string according to a user-specified format. The date must be a valid expression that resolves to &lt;code&gt;a Date, a Timestamp, or an ObjectID&lt;/code&gt;. Please refer to this page for &lt;a href=&quot;https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/#format-specifiers&quot;&gt;format descriptors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/one-click-group-date.png&quot; alt=&quot;Group by date - generated code&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;One-click-grouping-of-embedded-array-fields&quot;&gt;&lt;a href=&quot;#One-click-grouping-of-embedded-array-fields&quot; class=&quot;headerlink&quot; title=&quot;One-click grouping of embedded array fields&quot;&gt;&lt;/a&gt;One-click grouping of embedded array fields&lt;/h2&gt;&lt;p&gt;When you use one-click grouping for an embedded array field, the generated code automatically prepends a $unwind stage.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/one-click-group-embedded-array-field.png&quot; alt=&quot;Group by array field&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;New-JSON-view-format-plain-JSON&quot;&gt;&lt;a href=&quot;#New-JSON-view-format-plain-JSON&quot; class=&quot;headerlink&quot; title=&quot;New JSON view format (plain JSON)&quot;&gt;&lt;/a&gt;New JSON view format (plain JSON)&lt;/h2&gt;&lt;p&gt;In version 7, JSON view has three formats. MongoDB shell format is actually js code, which can be copied and pasted into mongo script. MongoDB Extended Type-conserving EJSON format is more suitable for data exchange. The new plain JSON is simple human-readable pure JSON text, losing type information.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/json-view-plain-text.png&quot; alt=&quot;JSON View - plain JSON&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Navigation-bar-and-automatic-refresh-of-document-viewer&quot;&gt;&lt;a href=&quot;#Navigation-bar-and-automatic-refresh-of-document-viewer&quot; class=&quot;headerlink&quot; title=&quot;Navigation bar and automatic refresh of document viewer&quot;&gt;&lt;/a&gt;Navigation bar and automatic refresh of document viewer&lt;/h2&gt;&lt;p&gt;Add a new navigator bar to document viewer, previous, next ... And, when automatic refresh is activated, the pop-up edit box and document viewer are refreshed synchronously.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/json-view-navigator.png&quot; alt=&quot;Document viewer - navigator &quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Faster-tab-switching-and-tab-switcher&quot;&gt;&lt;a href=&quot;#Faster-tab-switching-and-tab-switcher&quot; class=&quot;headerlink&quot; title=&quot;Faster tab switching and tab switcher&quot;&gt;&lt;/a&gt;Faster tab switching and tab switcher&lt;/h2&gt;&lt;p&gt;In this release, after careful code review, we reduced unnecessary DOM reflows, greatly speeding up the response time for tab switching. The new tab switcher also provides more convenience for tab switching.&lt;/p&gt;
&lt;p&gt;The following picture shows the tab switcher, and the orange item indicates that the tab is being debugged.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/tab-switcher.png&quot; alt=&quot;Tab switcher &quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Rename-tab-title&quot;&gt;&lt;a href=&quot;#Rename-tab-title&quot; class=&quot;headerlink&quot; title=&quot;Rename tab title&quot;&gt;&lt;/a&gt;Rename tab title&lt;/h2&gt;&lt;p&gt;The following figure shows the right-click menu of the tab. Click &amp;quot;Rename Tab...&amp;quot; to rename the title of the selected tab.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/tab-rename.png&quot; alt=&quot;Tab switcher &quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Export-Import-connections-and-application-configuration&quot;&gt;&lt;a href=&quot;#Export-Import-connections-and-application-configuration&quot; class=&quot;headerlink&quot; title=&quot;Export&amp;#x2F;Import connections and application configuration&quot;&gt;&lt;/a&gt;Export&amp;#x2F;Import connections and application configuration&lt;/h1&gt;&lt;p&gt;In previous versions, exporting&amp;#x2F;importing connection could only export&amp;#x2F;import connection configuration information. In version 7, we redesigned this feature to export&amp;#x2F;import not only the selected connection configuration, but also custom queries, tasks, code snippets, favorites related to the connection, and general application configurations and options.  You can use this feature to set up a backup for the application configuration.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v7-export-connections.png&quot; alt=&quot;Export&amp;#x2F;Import connections&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Support-for-more-export-formats-xlsb-txt-and-html&quot;&gt;&lt;a href=&quot;#Support-for-more-export-formats-xlsb-txt-and-html&quot; class=&quot;headerlink&quot; title=&quot;Support for more export formats (.xlsb, .txt and .html)&quot;&gt;&lt;/a&gt;Support for more export formats (.xlsb, .txt and .html)&lt;/h1&gt;&lt;p&gt;Version 7 added 3 more export format. Excel 2007+ Binary Format (.xlsb), Max Rows: 1,048,576,  UTF-16 Unicode Text (.txt) and HTML Tables(.html). Export in JSON format has also been enhanced, adding two options to output documents in a pretty-printed format and export to JSON files using standard JSON arrays (separator [,&#92;n]).&lt;/p&gt;
&lt;p&gt;The following figure shows all the supported export formats, and the red box shows the new.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v7-export-formats.png&quot; alt=&quot;More export formats&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Other-notable-improvements&quot;&gt;&lt;a href=&quot;#Other-notable-improvements&quot; class=&quot;headerlink&quot; title=&quot;Other notable improvements&quot;&gt;&lt;/a&gt;Other notable improvements&lt;/h1&gt;&lt;h2 id=&quot;Better-fake-data-generator&quot;&gt;&lt;a href=&quot;#Better-fake-data-generator&quot; class=&quot;headerlink&quot; title=&quot;Better fake data generator&quot;&gt;&lt;/a&gt;Better fake data generator&lt;/h2&gt;&lt;p&gt;The &lt;a href=&quot;https://github.com/marak/Faker.js/&quot;&gt;faker.js&lt;/a&gt; module is updated to the latest 5.x version, and a large number of API methods are added to generate different types of fake data. We updated the GUI of test data generator and added the ability of name filtering and lookup.  We also added several code templates that start with &lt;code&gt;generateTestData&lt;/code&gt; to make it easier to generate fake data.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/fake-data-generator.png&quot; alt=&quot;Fake data generator&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;More-datetime-field-display-format&quot;&gt;&lt;a href=&quot;#More-datetime-field-display-format&quot; class=&quot;headerlink&quot; title=&quot;More datetime field display format&quot;&gt;&lt;/a&gt;More datetime field display format&lt;/h2&gt;&lt;p&gt;In this version, we have added several date display formats, please refer to the following figure. Marked in red as new.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v7-date-formats.png&quot; alt=&quot;Date display formats&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Set-comments-for-any-database-objects&quot;&gt;&lt;a href=&quot;#Set-comments-for-any-database-objects&quot; class=&quot;headerlink&quot; title=&quot;Set comments for any database objects&quot;&gt;&lt;/a&gt;Set comments for any database objects&lt;/h2&gt;&lt;p&gt;Now, you can set comments for any database objects. Note: Comments will not be saved to the MongoDB server in any way, only on your local computer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/comment-any-database-obj.png&quot; alt=&quot;Set comments&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;New-query-code-generator-Java-Use-Builders&quot;&gt;&lt;a href=&quot;#New-query-code-generator-Java-Use-Builders&quot; class=&quot;headerlink&quot; title=&quot;New query code generator (Java Use Builders)&quot;&gt;&lt;/a&gt;New query code generator (Java Use Builders)&lt;/h2&gt;&lt;p&gt;In version 7, a new query code generator &lt;code&gt;Java Use Builder&lt;/code&gt; has been added. The Java MongoDB driver dependency is also updated to &lt;a href=&quot;https://mongodb.github.io/mongo-java-driver/4.3/apidocs/mongodb-driver-sync/index.html&quot;&gt;modern API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/java-use-builders.png&quot; alt=&quot;Java Use Builders&quot;&gt; &lt;/p&gt;
&lt;h2 id=&quot;Open-MongoShell-here-prefer-mongosh-to-mongo-shell&quot;&gt;&lt;a href=&quot;#Open-MongoShell-here-prefer-mongosh-to-mongo-shell&quot; class=&quot;headerlink&quot; title=&quot;Open MongoShell here (prefer mongosh to mongo shell)&quot;&gt;&lt;/a&gt;Open MongoShell here (prefer mongosh to mongo shell)&lt;/h2&gt;&lt;p&gt;In addition to mongo (legacy mongo shell), this &lt;code&gt;Open MongoShell here&lt;/code&gt; feature also supports mongosh (new mongo shell). When both mongosh and mongo can be found in the search path, mongosh will be preferred.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/open-mongosh-here.png&quot; alt=&quot;Open MongoShell here&quot;&gt; &lt;/p&gt;
&lt;h2 id=&quot;Last-accessed-field-in-the-connections-dialog&quot;&gt;&lt;a href=&quot;#Last-accessed-field-in-the-connections-dialog&quot; class=&quot;headerlink&quot; title=&quot;Last accessed field in the connections dialog&quot;&gt;&lt;/a&gt;Last accessed field in the connections dialog&lt;/h2&gt;&lt;p&gt;The new &amp;quot;Last Accessed&amp;quot; field added to the connection dialog box. Allow sorting and filtering.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/last-accessed-connection-dialog.png&quot; alt=&quot;Last Accessed&quot;&gt; &lt;/p&gt;
&lt;h1 id=&quot;Breaking-Changes&quot;&gt;&lt;a href=&quot;#Breaking-Changes&quot; class=&quot;headerlink&quot; title=&quot;Breaking Changes&quot;&gt;&lt;/a&gt;Breaking Changes&lt;/h1&gt;&lt;h3 id=&quot;Numeric-Types&quot;&gt;&lt;a href=&quot;#Numeric-Types&quot; class=&quot;headerlink&quot; title=&quot;Numeric Types&quot;&gt;&lt;/a&gt;Numeric Types&lt;/h3&gt;&lt;p&gt;In order to be compatible with the behavior of the new &lt;a href=&quot;https://docs.mongodb.com/mongodb-shell/&quot;&gt;mongosh&lt;/a&gt;, unlike previous versions (legacy mongo shell), version 7 does not need to explicitly declare the int32 type when submitting data, but automatically selects the closest equivalent type.&lt;/p&gt;
&lt;p&gt;Compare the differences between version 6 and version 7 below&lt;/p&gt;
 &lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//In version 7, when the value is int32, int32 is inserted, &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//but in version 6 or below, if there is no explicit declaration, Double is always inserted&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;testCollection&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insertOne&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,    &lt;span class=&quot;comment&quot;&gt;//version 7: int32,    version 6: double, &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;b&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1.0&lt;/span&gt;,  &lt;span class=&quot;comment&quot;&gt;//version 7: int32,    version 6: double, &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;c&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1.1&lt;/span&gt;,   &lt;span class=&quot;comment&quot;&gt;//version 7: double,   version 6: double&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;d&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;Number&lt;/span&gt;.&lt;span class=&quot;property&quot;&gt;MAX_SAFE_INTEGER&lt;/span&gt;,&lt;span class=&quot;comment&quot;&gt;//version 7: double,  version 6: double&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&quot;Shortcuts&quot;&gt;&lt;a href=&quot;#Shortcuts&quot; class=&quot;headerlink&quot; title=&quot;Shortcuts&quot;&gt;&lt;/a&gt;Shortcuts&lt;/h3&gt;&lt;p&gt;Due to the introduction of the debugger, some keyboard shortcuts have been adjusted, and you can view the bound shortcuts through the button&amp;#39;s tooltip.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;F5&lt;/code&gt; to start debugging, &lt;code&gt;CTRL+Enter|CTRL+F5&lt;/code&gt; to run without debugging.  &lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;F6&lt;/code&gt; to Run Selected Text&amp;#x2F;Current Statement. &lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;error-message&quot;&gt;&lt;em&gt;&lt;strong&gt;Unlike previous versions, click the &amp;quot;Run&amp;quot; button or press CTRL+ENTER to always run the entire script even if you select some of the scripts.&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;Miscellaneous-improvements-and-bug-fixes&quot;&gt;&lt;a href=&quot;#Miscellaneous-improvements-and-bug-fixes&quot; class=&quot;headerlink&quot; title=&quot;Miscellaneous improvements and bug fixes&quot;&gt;&lt;/a&gt;Miscellaneous improvements and bug fixes&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;Upgrade MongoDB nodejs driver to v4.1. &lt;a href=&quot;https://docs.mongodb.com/drivers/node/current/whats-new/&quot;&gt;ref&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upgrade major dependencies electron to v9.4, Chrome v83., Node v12.14, and V8 v8.3.&lt;/li&gt;
&lt;li&gt;Upgrade embedded mongo shell to 5.0.&lt;/li&gt;
&lt;li&gt;Upgrade ssh2 module to 1.3, support more server host key formats &lt;a href=&quot;https://github.com/mscdex/ssh2#client-methods&quot;&gt;ref&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Update the type definition of the 3rd dependent library(lodash, Moment.js and Faker.js) to the latest.&lt;/li&gt;
&lt;li&gt;Add a new &amp;quot;No to All&amp;quot; option to the confirmation dialog box for closing unsaved tabs.&lt;/li&gt;
&lt;li&gt;Add &amp;quot;Watch instance&amp;#x2F;database&amp;#x2F;collection&amp;quot; menu items to the tools menu.&lt;/li&gt;
&lt;li&gt;Add the &amp;quot;Test Connection&amp;quot; diagnosis function to the error window When the connection fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;Patch-Releases&quot;&gt;&lt;a href=&quot;#Patch-Releases&quot; class=&quot;headerlink&quot; title=&quot;Patch Releases&quot;&gt;&lt;/a&gt;Patch Releases&lt;/h1&gt;&lt;h2 id=&quot;Version-7-0-2&quot;&gt;&lt;a href=&quot;#Version-7-0-2&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.2&quot;&gt;&lt;/a&gt;Version 7.0.2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed,  error parsing MongoDB tools command line options: invalid argument for flag &amp;#96;--uri&amp;#39; (expected string): invalid syntax.&lt;/li&gt;
&lt;li&gt;Fixed,  error parsing mongodump command line options: unknown option &amp;quot;tlsAllowInvalidCertificates&amp;quot;.&lt;/li&gt;
&lt;li&gt;Improved, easier access to black editor themes.&lt;/li&gt;
&lt;li&gt;Improved, tweak dracula and monokai dark themes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-3&quot;&gt;&lt;a href=&quot;#Version-7-0-3&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.3&quot;&gt;&lt;/a&gt;Version 7.0.3&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Improved, for sorting after one-click grouping, replace the original sorting stage instead of pushing one.&lt;/li&gt;
&lt;li&gt;Improved, if it is connecting to a load balancer fronting a mongos like service, add a &amp;quot;load balanced&amp;quot; status to the connection node.&lt;/li&gt;
&lt;li&gt;Improved, tweak the hover style of tables and trees with dark themes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-4&quot;&gt;&lt;a href=&quot;#Version-7-0-4&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.4&quot;&gt;&lt;/a&gt;Version 7.0.4&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a MacOS edition bug that caused a zombie process when exit the program by pressing &amp;quot;CMD+Q&amp;quot;.&lt;/li&gt;
&lt;li&gt;Fixed, a MacOS edition bug where the global shortcut key &amp;quot;CMD+Q&amp;quot; was incorrectly bound.&lt;/li&gt;
&lt;li&gt;Improved, reorganized the &amp;quot;Help- &amp;gt; Feedback&amp;#x2F;Support&amp;quot; sub menu and added items to send bug report and feature request.&lt;/li&gt;
&lt;li&gt;Improved, remember the size and position of the connection editor dialog.&lt;/li&gt;
&lt;li&gt;Improved, in the tree view, allow field names to be sorted by clicking the header of the key column.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-5&quot;&gt;&lt;a href=&quot;#Version-7-0-5&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.5&quot;&gt;&lt;/a&gt;Version 7.0.5&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, an auto-complete bug that could not be popped up in some cases.&lt;/li&gt;
&lt;li&gt;Fixed, a linux edition bug that caused a zombie process when exit the program.&lt;/li&gt;
&lt;li&gt;Fixed, a &amp;quot;Option ssl_ca_certs is not support&amp;quot; error occurred when trying to connect to AWS DocumentDB.&lt;/li&gt;
&lt;li&gt;Added, a &amp;quot;reload&amp;quot; reminder when an edit file opened with an external editor is modified.&lt;/li&gt;
&lt;li&gt;Added, a &amp;quot;clear filter&amp;quot; action to the history script dialog.&lt;/li&gt;
&lt;li&gt;Added, &amp;quot;Copy Path&amp;quot; and &amp;quot;Reveal in explorer&amp;quot; actions to the context menu when the script in the editor is a file.&lt;/li&gt;
&lt;li&gt;Improved, UI performance of opening complex large documents.&lt;/li&gt;
&lt;li&gt;Improved, bind the shortcut key &amp;quot;F6&amp;quot; to the &amp;quot;Run Selected Text&amp;#x2F;Current Statement&amp;quot; action.&lt;/li&gt;
&lt;li&gt;Improved, If no breakpoint is set, pressing the shortcut key &amp;quot;F5&amp;quot; does not enter debug mode, which is equivalent to pressing &amp;quot;CMD+ENTER&amp;quot; to run the entire script without debugging.&lt;/li&gt;
&lt;li&gt;Improved, change the title of the window to the title of the selected tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-6&quot;&gt;&lt;a href=&quot;#Version-7-0-6&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.6&quot;&gt;&lt;/a&gt;Version 7.0.6&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, connection timeout error in some cases when connecting to a replication set through SSH tunnel.&lt;/li&gt;
&lt;li&gt;Fixed, UI freeze error when writing a large file to script history.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-7&quot;&gt;&lt;a href=&quot;#Version-7-0-7&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.7&quot;&gt;&lt;/a&gt;Version 7.0.7&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a bug where the &amp;quot;find by database name&amp;quot; function did not work in the connection tree.&lt;/li&gt;
&lt;li&gt;Improved, if you are upgrading from an older version to version 7, a &amp;quot;shortcut break change&amp;quot; prompt pops up when you first press the &amp;quot;Run&amp;quot; button.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-8&quot;&gt;&lt;a href=&quot;#Version-7-0-8&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.8&quot;&gt;&lt;/a&gt;Version 7.0.8&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a bug of an explain method of aggregation cursor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-9&quot;&gt;&lt;a href=&quot;#Version-7-0-9&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.9&quot;&gt;&lt;/a&gt;Version 7.0.9&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a bug where orphaned processes caused by forced exit of the application resulted in high CPU usage, MacOS only.&lt;/li&gt;
&lt;li&gt;Fixed, a bug that double-clicked to &lt;em&gt;&lt;strong&gt;clone the current tab&lt;/strong&gt;&lt;/em&gt;. if the current tab includes a $operator, the $operator will be mistakenly replaced with blank space.&lt;/li&gt;
&lt;li&gt;Fixed, an error that caused an &amp;quot;$currentOp Aggregation provides invalid namespace&amp;quot; error when the &lt;em&gt;&lt;strong&gt;&amp;quot;db.aggregate&amp;quot;&lt;/strong&gt;&lt;/em&gt; method was executed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-10&quot;&gt;&lt;a href=&quot;#Version-7-0-10&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.10&quot;&gt;&lt;/a&gt;Version 7.0.10&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, an error where the date field was set to undefined when importing an EJSON file containing the $date field.&lt;/li&gt;
&lt;li&gt;Fixed，a bug where the connection type was misplaced when importing the connection URI of &amp;quot;mongo+srv:&amp;#x2F;&amp;#x2F;&amp;quot;.&lt;/li&gt;
&lt;li&gt;Improved, more SSH key formats are supported, RSA, DSA, ECDSA (nistp-*) and ED25519 key types, in PEM (PKCS#1, PKCS#8) and OpenSSH formats.&lt;/li&gt;
&lt;li&gt;Improved, optimized application icon in MacOS system.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Version-7-0-11&quot;&gt;&lt;a href=&quot;#Version-7-0-11&quot; class=&quot;headerlink&quot; title=&quot;Version 7.0.11&quot;&gt;&lt;/a&gt;Version 7.0.11&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a missing &amp;quot;save button&amp;quot; bug in the dialog of mongodump task editor in some cases.&lt;/li&gt;
&lt;li&gt;Fixed，a SQL query error that reported an exception of &amp;quot;db.stats.aggregate is not a function&amp;quot; if the collection name is a method of db object (for example, the collection name is stats or version, &amp;quot;select * from stats&amp;quot;).&lt;/li&gt;
&lt;li&gt;Fixed，a link error in MSSQL uri connect format.&lt;/li&gt;
&lt;/ul&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we are extremely pleased to announce the release of NoSQLBooster 7.0. It brings a number of new features to increase MongoDB&#39;ers productivity, MongoDB script debugger, official support for MongoDB 5.0, replica set members drop-down, collection re-schema tool, one-click grouping by date, task email notification, better fake data generator and more. </p><p>if you want to try NoSQLBooster 7.0 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 7.0 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free edition is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>The following figure shows the main interface of version 7.0 with a light theme.</p><p><img src="/blog/img/v7-main-interface-light.png" alt="Main interface in light"> </p><p>The following figure shows the main interface of version 7.0 with a dark theme.</p><p><img src="/blog/img/v7-main-interface-dark.png" alt="Main interface in dark"> </p><p>Let’s dive in and get an overview of what’s coming in NoSQLBooster 7.0!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#mongodb-script-debugger-unique-feature">MongoDB script debugger (unique feature)</a></li><li><a href="#replica-set-members-drop-down-list">Replica set members drop-down list</a></li><li><a href="#collection-re-schema-tool">Collection re-schema tool</a></li><li><a href="#mongodb-50-support">MongoDB 5.0 support</a><ul><li><a href="#new-code-templates-for-mongodb-50">New Code templates for MongoDB 5.0</a><ul><li><a href="#createtimeseriescollection">createTimeSeriesCollection</a></li><li><a href="#setwindowfields-chain-method">setWindowFields chain method</a></li></ul></li><li><a href="#new-date-operators-in-sql">New date operators in SQL</a></li></ul></li><li><a href="#task-email-notification">Task email notification</a></li><li><a href="#script-editor-improvements">Script Editor Improvements</a><ul><li><a href="#advanced-code-complete">Advanced code-complete</a></li><li><a href="#editor-themes">Editor themes</a></li><li><a href="#change-editor-font-size">Change Editor font size</a></li><li><a href="#switch-rs-member-within-the-editor">Switch rs member within the editor</a></li><li><a href="#send-to-external-tool">Send to external tool</a></li></ul></li><li><a href="#results-tabs-and-data-viewer-improvements">Results tabs and data viewer improvements</a><ul><li><a href="#one-click-groupingfiltering-of-date-fields">One-click grouping&#x2F;filtering of date fields</a></li><li><a href="#one-click-grouping-of-embedded-array-fields">One-click grouping of embedded array fields</a></li><li><a href="#new-json-view-format-plain-json">New JSON view format (plain JSON)</a></li><li><a href="#navigation-bar-and-automatic-refresh-of-document-viewer">Navigation bar and automatic refresh of document viewer</a></li><li><a href="#faster-tab-switching-and-tab-switcher">Faster tab switching and tab switcher</a></li><li><a href="#rename-tab-title">Rename tab title</a></li></ul></li><li><a href="#exportimport-connections-and-application-configuration">Export&#x2F;Import connections and application configuration</a></li><li><a href="#support-for-more-export-formats-xlsb-txt-and-html">Support for more export formats (.xlsb, .txt and .html)</a></li><li><a href="#other-notable-improvements">Other notable improvements</a><ul><li><a href="#better-fake-data-generator">Better fake data generator</a></li><li><a href="#more-datetime-field-display-format">More datetime field display format</a></li><li><a href="#set-comments-for-any-database-objects">Set comments for any database objects</a></li><li><a href="#new-query-code-generator-java-use-builders">New query code generator (Java Use Builders)</a></li><li><a href="#open-mongoshell-here-prefer-mongosh-to-mongo-shell">Open MongoShell here (prefer mongosh to mongo shell)</a></li><li><a href="#last-accessed-field-in-the-connections-dialog">Last accessed field in the connections dialog</a></li></ul></li><li><a href="#breaking-changes">Breaking Changes</a><ul><li><a href="#numeric-types">Numeric Types</a></li><li><a href="#shortcuts">Shortcuts</a></li></ul></li><li><a href="#miscellaneous-improvements-and-bug-fixes">Miscellaneous improvements and bug fixes</a></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-702">Version 7.0.2</a></li><li><a href="#version-703">Version 7.0.3</a></li><li><a href="#version-704">Version 7.0.4</a></li><li><a href="#version-705">Version 7.0.5</a></li><li><a href="#version-706">Version 7.0.6</a></li><li><a href="#version-707">Version 7.0.7</a></li><li><a href="#version-708">Version 7.0.8</a></li><li><a href="#version-709">Version 7.0.9</a></li><li><a href="#version-7010">Version 7.0.10</a></li><li><a href="#version-7011">Version 7.0.11</a></li></ul></li></ul><!-- tocstop --><h1><span id="mongodb-script-debugger-unique-feature">MongoDB script debugger (unique feature)</span></h1><p>Still debugging your MongoDB script with print statements? Now, you can use NoSQLBooster&#39;s built-in debugging capabilities to set breakpoints and step through code.</p><p>To start debugging, click the editor&#39;s text margin to set a breakpoint <code>F9</code>, and run with debugger <code>F5</code>. When your breakpoint is hit, you can explore the call stack, watch and edit variables, and interact directly with the debugger.</p><p><img src="/blog/img/debugger-with-breakpoints.png" alt="Debugging with Breakpoints"></p><p>Due to the introduction of the debugger, some keyboard shortcuts have been adjusted, and you can view the bound shortcuts through the button&#39;s tooltip.</p><ul><li>Press <code>F5</code> to start debugging, <code>CTRL+Enter|CTRL+F5</code> to run without debugging.  </li><li>Press <code>F6</code> to Run Selected Text&#x2F;Current Statement. </li><li><span class="error-message"><em><strong>Unlike previous versions, click the &quot;Run&quot; button or press CTRL+ENTER to always run the entire script even if you select some of the scripts.</strong></em></span></li></ul><h1><span id="replica-set-members-drop-down-list">Replica set members drop-down list</span></h1><p>In many panels, we have added a replica set members selector that allows you to switch between the members of the replica set in the interface. This is especially convenient for monitoring tools, and many times you want to drill down to a rs member to see the details.</p><p><img src="/blog/img/rs-members-dropdown.png" alt="Replica set members drop-down list"></p><h1><span id="collection-re-schema-tool">Collection re-schema tool</span></h1><p>The new re-schema tool provides a GUI for updating the MongoDB collection schema. Like other tools provided by NoSQLBooster, it is essentially a code generation tool that helps you generate code to update the collection with a few clicks, and then you can use the generated code as a basis for more complex programming, then save it as a script file, or even add automated tasks.</p><p>This feature uses <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/convert/">&quot;$convert&quot; operator</a> and <a href="https://docs.mongodb.com/manual/reference/method/db.collection.update/index.html#update-method-agg-pipeline">update using an aggregation pipeline</a>, requires MongoDB server version 4.2 or above. We also provide a code template called <code>convertFieldType</code> to convert individual fields, which can be used directly in the script editor.</p><p><img src="/blog/img/reschema-collection.png" alt="Re-schema Collection"></p><h1><span id="mongodb-50-support">MongoDB 5.0 support</span></h1><p>NoSQLBooster 7.0 upgrades the MongoDB Node.js driver to the latest 4.1 and embedded MongoDB Shell to 5.0, adding support for all the new mongo shell methods and aggregation operators of MongoDB 5.0. For more information on MongoDB 5.0 , see <a href="https://docs.mongodb.com/manual/release-notes/5.0/">Release Notes for MongoDB 5.0</a>.</p><h2><span id="new-code-templates-for-mongodb-50">New Code templates for MongoDB 5.0</span></h2><p>This release added a few code templates for MongoDB 5.0. </p><h3><span id="createtimeseriescollection">createTimeSeriesCollection</span></h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//then press &quot;tab&quot; to complete code</span></span><br><span class="line">createTimeSeriesCollection</span><br><span class="line"></span><br><span class="line"><span class="comment">//got</span></span><br><span class="line">db.<span class="title function_">createCollection</span>(</span><br><span class="line">      <span class="string">&quot;name&quot;</span>,</span><br><span class="line">      &#123;</span><br><span class="line">         <span class="attr">timeseries</span>: &#123;</span><br><span class="line">            <span class="attr">timeField</span>: <span class="string">&quot;timestamp&quot;</span>,</span><br><span class="line">            <span class="comment">//metaField: &quot;metadata&quot;,</span></span><br><span class="line">            <span class="comment">//granularity: &quot;hours&quot;</span></span><br><span class="line">         &#125;,</span><br><span class="line">         <span class="comment">//expireAfterSeconds: 86400</span></span><br><span class="line">      &#125;</span><br><span class="line">  )</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3><span id="setwindowfields-chain-method">setWindowFields chain method</span></h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">cakeSales</span>.<span class="title function_">insertMany</span>( [</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">0</span>, <span class="attr">type</span>: <span class="string">&quot;chocolate&quot;</span>, <span class="attr">orderDate</span>: <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="string">&quot;2020-05-18T14:10:30Z&quot;</span>),</span><br><span class="line">     <span class="attr">state</span>: <span class="string">&quot;CA&quot;</span>, <span class="attr">price</span>: <span class="number">13</span>, <span class="attr">quantity</span>: <span class="number">120</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">1</span>, <span class="attr">type</span>: <span class="string">&quot;chocolate&quot;</span>, <span class="attr">orderDate</span>: <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="string">&quot;2021-03-20T11:30:05Z&quot;</span>),</span><br><span class="line">     <span class="attr">state</span>: <span class="string">&quot;WA&quot;</span>, <span class="attr">price</span>: <span class="number">14</span>, <span class="attr">quantity</span>: <span class="number">140</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">2</span>, <span class="attr">type</span>: <span class="string">&quot;vanilla&quot;</span>, <span class="attr">orderDate</span>: <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="string">&quot;2021-01-11T06:31:15Z&quot;</span>),</span><br><span class="line">     <span class="attr">state</span>: <span class="string">&quot;CA&quot;</span>, <span class="attr">price</span>: <span class="number">12</span>, <span class="attr">quantity</span>: <span class="number">145</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">3</span>, <span class="attr">type</span>: <span class="string">&quot;vanilla&quot;</span>, <span class="attr">orderDate</span>: <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="string">&quot;2020-02-08T13:13:23Z&quot;</span>),</span><br><span class="line">     <span class="attr">state</span>: <span class="string">&quot;WA&quot;</span>, <span class="attr">price</span>: <span class="number">13</span>, <span class="attr">quantity</span>: <span class="number">104</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">4</span>, <span class="attr">type</span>: <span class="string">&quot;strawberry&quot;</span>, <span class="attr">orderDate</span>: <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="string">&quot;2019-05-18T16:09:01Z&quot;</span>),</span><br><span class="line">     <span class="attr">state</span>: <span class="string">&quot;CA&quot;</span>, <span class="attr">price</span>: <span class="number">41</span>, <span class="attr">quantity</span>: <span class="number">162</span> &#125;,</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">5</span>, <span class="attr">type</span>: <span class="string">&quot;strawberry&quot;</span>, <span class="attr">orderDate</span>: <span class="keyword">new</span> <span class="title class_">Date</span>(<span class="string">&quot;2019-01-08T06:12:03Z&quot;</span>),</span><br><span class="line">     <span class="attr">state</span>: <span class="string">&quot;WA&quot;</span>, <span class="attr">price</span>: <span class="number">43</span>, <span class="attr">quantity</span>: <span class="number">134</span> &#125;</span><br><span class="line">] )</span><br><span class="line"></span><br><span class="line">db.<span class="property">cakeSales</span>.<span class="title function_">aggregate</span>().<span class="property">setWindowFields</span> <span class="comment">//then press &quot;tab&quot; to complete code</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//got</span></span><br><span class="line">db.<span class="property">cakeSales</span>.<span class="title function_">aggregate</span>().<span class="title function_">setWindowFields</span>(&#123;</span><br><span class="line">      <span class="attr">partitionBy</span>: <span class="string">&quot;$state&quot;</span>,</span><br><span class="line">      <span class="attr">sortBy</span>: &#123; <span class="attr">orderDate</span>: <span class="number">1</span> &#125;,</span><br><span class="line">      <span class="attr">output</span>: &#123;</span><br><span class="line">          <span class="attr">cumulativeQuantityForState</span>: &#123;</span><br><span class="line">              <span class="attr">$sum</span>: <span class="string">&quot;$quantity&quot;</span>,</span><br><span class="line">              <span class="attr">window</span>: &#123;</span><br><span class="line">                  <span class="attr">documents</span>: [<span class="string">&quot;unbounded&quot;</span>, <span class="string">&quot;current&quot;</span>]</span><br><span class="line">              &#125;</span><br><span class="line">          &#125;</span><br><span class="line">      &#125;</span><br><span class="line">&#125;)  </span><br></pre></td></tr></table></figure><h2><span id="new-date-operators-in-sql">New date operators in SQL</span></h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">shipping</span>.<span class="title function_">insertMany</span>([&#123;<span class="attr">custId</span>: <span class="number">456</span>, <span class="attr">purchaseDate</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2020-12-31&quot;</span>) &#125;,&#123; <span class="attr">custId</span>: <span class="number">457</span>, <span class="attr">purchaseDate</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2021-02-28&quot;</span>) &#125;]);<span class="comment">//test data</span></span><br><span class="line">  </span><br><span class="line">  </span><br><span class="line"><span class="comment">//New date operators $dateAdd, $dateSubtract, $dateTrunc, $dateDiff, all of which can be used as SQL functions</span></span><br><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">       SELECT dateAdd(startDate=&#x27;$purchaseDate&#x27;, unit=&#x27;day&#x27;, amount=3, timezone=&#x27;America/New_York&#x27;) as DATE_ADD,</span></span><br><span class="line"><span class="string">              dateSubtract(startDate=&#x27;$purchaseDate&#x27;, unit=&#x27;day&#x27;, amount=3, timezone=&#x27;America/New_York&#x27;) as DATE_SUBTRACT,</span></span><br><span class="line"><span class="string">              dateTrunc(date=&#x27;$purchaseDate&#x27;, unit=&#x27;week&#x27;, binSize=2, timezone=&#x27;America/New_York&#x27;, startOfWeek=&#x27;Monday&#x27;) as DATE_TRUNC,</span></span><br><span class="line"><span class="string">              dateDiff(startDate=&#x27;$purchaseDate&#x27;, endDate=&#x27;$$NOW&#x27;, unit=&#x27;day&#x27;,  timezone=&#x27;America/New_York&#x27;, startOfWeek=&#x27;Monday&#x27;) as DATE_DIFF</span></span><br><span class="line"><span class="string">       FROM shipping</span></span><br><span class="line"><span class="string">       </span></span><br><span class="line"><span class="string">`</span>).<span class="title function_">sort</span>(&#123;<span class="attr">_id</span>:-<span class="number">1</span>&#125;)</span><br><span class="line">  .<span class="title function_">limit</span>(<span class="number">100</span>)  </span><br></pre></td></tr></table></figure><p>NoSQLBooster 7.0 also enhanced mouse hover for all new aggregation chain methods and aggregation Operators. In addition to method and type definitions, hover is now able to display document and example for these aggregation chain methods.</p><h1><span id="task-email-notification">Task email notification</span></h1><p>In version 7, automated tasks added the ability to notify via e-mail. You can specify that some users receive e-mail notifications of task completion or failure. All types of tasks can be notified by email. </p><p>To enable email notification,<br><code>Menu -&gt; Tools -&gt; Open Tasks... -&gt; Select Task -&gt; Edit -&gt; Mail Notification</code></p><p><img src="/blog/img/task-mail-notification.png" alt="Task email notification"></p><p>After you configure the default SMTP transport, you can also use the new code templates that starts with <code>sendMail</code> to add the ability to send mail to the script more easily. The following is the new code templates that starts with <code>sendMail</code>.</p><p><img src="/blog/img/send_mail_code_templates.png" alt="Send email code templates"></p><h1><span id="script-editor-improvements">Script Editor Improvements</span></h1><h2><span id="advanced-code-complete">Advanced code-complete</span></h2><p>Version 7 can intelligently match typed text to enable completion beyond single words. Take the toUpperCase method of a string as an example. In the old version, you had to type &quot;toU&quot; or &quot;Upper&quot; to find the method. In version 7, just type &quot;tu&quot; to locate the &quot;toUpperCase&quot; method. </p><p>As shown in the following figure.</p><p><img src="/blog/img/code-complete-wild-match.png" alt="Advanced code-complete"></p><h2><span id="editor-themes">Editor themes</span></h2><p>Now, we have 14 built-in editor themes to choose from, and you can apply the editor&#39;s theme through the editor&#39;s right-click menu. It may also be set through the main menu.<br><code>Main Menu -&gt; Options -&gt; Editor Settings -&gt; Themes</code></p><p><img src="/blog/img/editor-themes.png" alt="Editor themes"></p><h2><span id="change-editor-font-size">Change Editor font size</span></h2><p>The font size of the editor also be set through the main menu. <code>Main Menu -&gt; Options -&gt; Editor Settings -&gt; Font size</code> with a minimum of 6px and a maximum of 30px. </p><p><img src="/blog/img/editor-font-size.png" alt="Editor font size"></p><h2><span id="switch-rs-member-within-the-editor">Switch rs member within the editor</span></h2><p>As mentioned earlier in the replica set drop-down list, you can directly connect and switch members of the replica set within the script editor.</p><p><img src="/blog/img/rs-member-list-in-editor.png" alt="Switch rs member in editor"></p><h2><span id="send-to-external-tool">Send to external tool</span></h2><p>You can send the editor contents to the external editor associated with the system through the editor&#39;s right-click menu.</p><p><img src="/blog/img/sent-to-external-editor.png" alt="Send to external editor"></p><h1><span id="results-tabs-and-data-viewer-improvements">Results tabs and data viewer improvements</span></h1><h2><span id="one-click-groupingx2ffiltering-of-date-fields">One-click grouping&#x2F;filtering of date fields</span></h2><p>For date fields, grouping by a certain point in time is not practical. In version 7, we have enhanced grouping of date and time fields. The one-click grouping function will be grouped by day (formatted by <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString">$dateToString</a> operator), and users also modify the generated code to support more date ranges. </p><p><img src="/blog/img/one-click-group-context-menu.png" alt="One-click group context menu"></p><p>The $dateToString operator converts a date object to a string according to a user-specified format. The date must be a valid expression that resolves to <code>a Date, a Timestamp, or an ObjectID</code>. Please refer to this page for <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/#format-specifiers">format descriptors</a>.</p><p><img src="/blog/img/one-click-group-date.png" alt="Group by date - generated code"></p><h2><span id="one-click-grouping-of-embedded-array-fields">One-click grouping of embedded array fields</span></h2><p>When you use one-click grouping for an embedded array field, the generated code automatically prepends a $unwind stage.</p><p><img src="/blog/img/one-click-group-embedded-array-field.png" alt="Group by array field"></p><h2><span id="new-json-view-format-plain-json">New JSON view format (plain JSON)</span></h2><p>In version 7, JSON view has three formats. MongoDB shell format is actually js code, which can be copied and pasted into mongo script. MongoDB Extended Type-conserving EJSON format is more suitable for data exchange. The new plain JSON is simple human-readable pure JSON text, losing type information.</p><p><img src="/blog/img/json-view-plain-text.png" alt="JSON View - plain JSON"></p><h2><span id="navigation-bar-and-automatic-refresh-of-document-viewer">Navigation bar and automatic refresh of document viewer</span></h2><p>Add a new navigator bar to document viewer, previous, next ... And, when automatic refresh is activated, the pop-up edit box and document viewer are refreshed synchronously.</p><p><img src="/blog/img/json-view-navigator.png" alt="Document viewer - navigator "></p><h2><span id="faster-tab-switching-and-tab-switcher">Faster tab switching and tab switcher</span></h2><p>In this release, after careful code review, we reduced unnecessary DOM reflows, greatly speeding up the response time for tab switching. The new tab switcher also provides more convenience for tab switching.</p><p>The following picture shows the tab switcher, and the orange item indicates that the tab is being debugged.</p><p><img src="/blog/img/tab-switcher.png" alt="Tab switcher "></p><h2><span id="rename-tab-title">Rename tab title</span></h2><p>The following figure shows the right-click menu of the tab. Click &quot;Rename Tab...&quot; to rename the title of the selected tab.</p><p><img src="/blog/img/tab-rename.png" alt="Tab switcher "></p><h1><span id="exportx2fimport-connections-and-application-configuration">Export&#x2F;Import connections and application configuration</span></h1><p>In previous versions, exporting&#x2F;importing connection could only export&#x2F;import connection configuration information. In version 7, we redesigned this feature to export&#x2F;import not only the selected connection configuration, but also custom queries, tasks, code snippets, favorites related to the connection, and general application configurations and options.  You can use this feature to set up a backup for the application configuration.</p><p><img src="/blog/img/v7-export-connections.png" alt="Export&#x2F;Import connections"></p><h1><span id="support-for-more-export-formats-xlsb-txt-and-html">Support for more export formats (.xlsb, .txt and .html)</span></h1><p>Version 7 added 3 more export format. Excel 2007+ Binary Format (.xlsb), Max Rows: 1,048,576,  UTF-16 Unicode Text (.txt) and HTML Tables(.html). Export in JSON format has also been enhanced, adding two options to output documents in a pretty-printed format and export to JSON files using standard JSON arrays (separator [,\n]).</p><p>The following figure shows all the supported export formats, and the red box shows the new.</p><p><img src="/blog/img/v7-export-formats.png" alt="More export formats"></p><h1><span id="other-notable-improvements">Other notable improvements</span></h1><h2><span id="better-fake-data-generator">Better fake data generator</span></h2><p>The <a href="https://github.com/marak/Faker.js/">faker.js</a> module is updated to the latest 5.x version, and a large number of API methods are added to generate different types of fake data. We updated the GUI of test data generator and added the ability of name filtering and lookup.  We also added several code templates that start with <code>generateTestData</code> to make it easier to generate fake data.</p><p><img src="/blog/img/fake-data-generator.png" alt="Fake data generator"></p><h2><span id="more-datetime-field-display-format">More datetime field display format</span></h2><p>In this version, we have added several date display formats, please refer to the following figure. Marked in red as new.</p><p><img src="/blog/img/v7-date-formats.png" alt="Date display formats"></p><h2><span id="set-comments-for-any-database-objects">Set comments for any database objects</span></h2><p>Now, you can set comments for any database objects. Note: Comments will not be saved to the MongoDB server in any way, only on your local computer.</p><p><img src="/blog/img/comment-any-database-obj.png" alt="Set comments"></p><h2><span id="new-query-code-generator-java-use-builders">New query code generator (Java Use Builders)</span></h2><p>In version 7, a new query code generator <code>Java Use Builder</code> has been added. The Java MongoDB driver dependency is also updated to <a href="https://mongodb.github.io/mongo-java-driver/4.3/apidocs/mongodb-driver-sync/index.html">modern API</a>.</p><p><img src="/blog/img/java-use-builders.png" alt="Java Use Builders"> </p><h2><span id="open-mongoshell-here-prefer-mongosh-to-mongo-shell">Open MongoShell here (prefer mongosh to mongo shell)</span></h2><p>In addition to mongo (legacy mongo shell), this <code>Open MongoShell here</code> feature also supports mongosh (new mongo shell). When both mongosh and mongo can be found in the search path, mongosh will be preferred.</p><p><img src="/blog/img/open-mongosh-here.png" alt="Open MongoShell here"> </p><h2><span id="last-accessed-field-in-the-connections-dialog">Last accessed field in the connections dialog</span></h2><p>The new &quot;Last Accessed&quot; field added to the connection dialog box. Allow sorting and filtering.</p><p><img src="/blog/img/last-accessed-connection-dialog.png" alt="Last Accessed"> </p><h1><span id="breaking-changes">Breaking Changes</span></h1><h3><span id="numeric-types">Numeric Types</span></h3><p>In order to be compatible with the behavior of the new <a href="https://docs.mongodb.com/mongodb-shell/">mongosh</a>, unlike previous versions (legacy mongo shell), version 7 does not need to explicitly declare the int32 type when submitting data, but automatically selects the closest equivalent type.</p><p>Compare the differences between version 6 and version 7 below</p> <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//In version 7, when the value is int32, int32 is inserted, </span></span><br><span class="line"><span class="comment">//but in version 6 or below, if there is no explicit declaration, Double is always inserted</span></span><br><span class="line">db.<span class="property">testCollection</span>.<span class="title function_">insertOne</span>(&#123;</span><br><span class="line">    <span class="attr">a</span>:<span class="number">1</span>,    <span class="comment">//version 7: int32,    version 6: double, </span></span><br><span class="line">    <span class="attr">b</span>:<span class="number">1.0</span>,  <span class="comment">//version 7: int32,    version 6: double, </span></span><br><span class="line">    <span class="attr">c</span>:<span class="number">1.1</span>,   <span class="comment">//version 7: double,   version 6: double</span></span><br><span class="line">    <span class="attr">d</span>: <span class="title class_">Number</span>.<span class="property">MAX_SAFE_INTEGER</span>,<span class="comment">//version 7: double,  version 6: double</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><h3><span id="shortcuts">Shortcuts</span></h3><p>Due to the introduction of the debugger, some keyboard shortcuts have been adjusted, and you can view the bound shortcuts through the button&#39;s tooltip.</p><ul><li>Press <code>F5</code> to start debugging, <code>CTRL+Enter|CTRL+F5</code> to run without debugging.  </li><li>Press <code>F6</code> to Run Selected Text&#x2F;Current Statement. </li><li><span class="error-message"><em><strong>Unlike previous versions, click the &quot;Run&quot; button or press CTRL+ENTER to always run the entire script even if you select some of the scripts.</strong></em></span></li></ul><h1><span id="miscellaneous-improvements-and-bug-fixes">Miscellaneous improvements and bug fixes</span></h1><ul><li>Upgrade MongoDB nodejs driver to v4.1. <a href="https://docs.mongodb.com/drivers/node/current/whats-new/">ref</a>.</li><li>Upgrade major dependencies electron to v9.4, Chrome v83., Node v12.14, and V8 v8.3.</li><li>Upgrade embedded mongo shell to 5.0.</li><li>Upgrade ssh2 module to 1.3, support more server host key formats <a href="https://github.com/mscdex/ssh2#client-methods">ref</a>.</li><li>Update the type definition of the 3rd dependent library(lodash, Moment.js and Faker.js) to the latest.</li><li>Add a new &quot;No to All&quot; option to the confirmation dialog box for closing unsaved tabs.</li><li>Add &quot;Watch instance&#x2F;database&#x2F;collection&quot; menu items to the tools menu.</li><li>Add the &quot;Test Connection&quot; diagnosis function to the error window When the connection fails.</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-702">Version 7.0.2</span></h2><ul><li>Fixed,  error parsing MongoDB tools command line options: invalid argument for flag &#96;--uri&#39; (expected string): invalid syntax.</li><li>Fixed,  error parsing mongodump command line options: unknown option &quot;tlsAllowInvalidCertificates&quot;.</li><li>Improved, easier access to black editor themes.</li><li>Improved, tweak dracula and monokai dark themes.</li></ul><h2><span id="version-703">Version 7.0.3</span></h2><ul><li>Improved, for sorting after one-click grouping, replace the original sorting stage instead of pushing one.</li><li>Improved, if it is connecting to a load balancer fronting a mongos like service, add a &quot;load balanced&quot; status to the connection node.</li><li>Improved, tweak the hover style of tables and trees with dark themes.</li></ul><h2><span id="version-704">Version 7.0.4</span></h2><ul><li>Fixed, a MacOS edition bug that caused a zombie process when exit the program by pressing &quot;CMD+Q&quot;.</li><li>Fixed, a MacOS edition bug where the global shortcut key &quot;CMD+Q&quot; was incorrectly bound.</li><li>Improved, reorganized the &quot;Help- &gt; Feedback&#x2F;Support&quot; sub menu and added items to send bug report and feature request.</li><li>Improved, remember the size and position of the connection editor dialog.</li><li>Improved, in the tree view, allow field names to be sorted by clicking the header of the key column.</li></ul><h2><span id="version-705">Version 7.0.5</span></h2><ul><li>Fixed, an auto-complete bug that could not be popped up in some cases.</li><li>Fixed, a linux edition bug that caused a zombie process when exit the program.</li><li>Fixed, a &quot;Option ssl_ca_certs is not support&quot; error occurred when trying to connect to AWS DocumentDB.</li><li>Added, a &quot;reload&quot; reminder when an edit file opened with an external editor is modified.</li><li>Added, a &quot;clear filter&quot; action to the history script dialog.</li><li>Added, &quot;Copy Path&quot; and &quot;Reveal in explorer&quot; actions to the context menu when the script in the editor is a file.</li><li>Improved, UI performance of opening complex large documents.</li><li>Improved, bind the shortcut key &quot;F6&quot; to the &quot;Run Selected Text&#x2F;Current Statement&quot; action.</li><li>Improved, If no breakpoint is set, pressing the shortcut key &quot;F5&quot; does not enter debug mode, which is equivalent to pressing &quot;CMD+ENTER&quot; to run the entire script without debugging.</li><li>Improved, change the title of the window to the title of the selected tab.</li></ul><h2><span id="version-706">Version 7.0.6</span></h2><ul><li>Fixed, connection timeout error in some cases when connecting to a replication set through SSH tunnel.</li><li>Fixed, UI freeze error when writing a large file to script history.</li></ul><h2><span id="version-707">Version 7.0.7</span></h2><ul><li>Fixed, a bug where the &quot;find by database name&quot; function did not work in the connection tree.</li><li>Improved, if you are upgrading from an older version to version 7, a &quot;shortcut break change&quot; prompt pops up when you first press the &quot;Run&quot; button.</li></ul><h2><span id="version-708">Version 7.0.8</span></h2><ul><li>Fixed, a bug of an explain method of aggregation cursor.</li></ul><h2><span id="version-709">Version 7.0.9</span></h2><ul><li>Fixed, a bug where orphaned processes caused by forced exit of the application resulted in high CPU usage, MacOS only.</li><li>Fixed, a bug that double-clicked to <em><strong>clone the current tab</strong></em>. if the current tab includes a $operator, the $operator will be mistakenly replaced with blank space.</li><li>Fixed, an error that caused an &quot;$currentOp Aggregation provides invalid namespace&quot; error when the <em><strong>&quot;db.aggregate&quot;</strong></em> method was executed.</li></ul><h2><span id="version-7010">Version 7.0.10</span></h2><ul><li>Fixed, an error where the date field was set to undefined when importing an EJSON file containing the $date field.</li><li>Fixed，a bug where the connection type was misplaced when importing the connection URI of &quot;mongo+srv:&#x2F;&#x2F;&quot;.</li><li>Improved, more SSH key formats are supported, RSA, DSA, ECDSA (nistp-*) and ED25519 key types, in PEM (PKCS#1, PKCS#8) and OpenSSH formats.</li><li>Improved, optimized application icon in MacOS system.</li></ul><h2><span id="version-7011">Version 7.0.11</span></h2><ul><li>Fixed, a missing &quot;save button&quot; bug in the dialog of mongodump task editor in some cases.</li><li>Fixed，a SQL query error that reported an exception of &quot;db.stats.aggregate is not a function&quot; if the collection name is a method of db object (for example, the collection name is stats or version, &quot;select * from stats&quot;).</li><li>Fixed，a link error in MSSQL uri connect format.</li></ul><span id="more"></span>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB5-0/">MongoDB5.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Debugger/">Debugger</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/ReplicaSet/">ReplicaSet</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Schema/">Schema</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-70/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 6.2 Released! One-Click Export to Excel</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-62/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-62/</guid>
      <pubDate>Wed, 11 Nov 2020 06:30:00 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 6.2 today. This version includes one-click export to XSLX and view as spreadsheet in Excel, object Explorer multiple selection operations, importing CSV files, and other ease-of-use improvements and bug fixes.&lt;/p&gt;
&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#export-and-import-enhancement&quot;&gt;Export and Import Enhancement&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#one-click-export-to-xsls-and-view-as-spreadsheet-in-excel&quot;&gt;One-Click Export to XSLS and View as Spreadsheet in Excel&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#click-the-new-excel-icon-in-the-toolbar&quot;&gt;Click the new excel icon in the toolbar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#view-as-spreadsheet-in-excel&quot;&gt;View as spreadsheet in Excel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#import-csv-file&quot;&gt;Import CSV File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#preprocess-importedexported-datatransformer&quot;&gt;Preprocess Imported&amp;#x2F;Exported Data(transformer)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-ease-of-use-improvements&quot;&gt;Other Ease-of-use improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#object-explorer-multiple-selection-operations&quot;&gt;Object Explorer Multiple Selection Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#convert-field-type&quot;&gt;Convert Field Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#minor-improvements-and-bugfix&quot;&gt;Minor Improvements and Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#patch-releases&quot;&gt;Patch Releases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-621&quot;&gt;Version 6.2.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-622-623&quot;&gt;Version 6.2.2-6.2.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-624&quot;&gt;Version 6.2.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-625&quot;&gt;Version 6.2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-626&quot;&gt;Version 6.2.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-627&quot;&gt;Version 6.2.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-628&quot;&gt;Version 6.2.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-629&quot;&gt;Version 6.2.9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6210&quot;&gt;Version 6.2.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6211&quot;&gt;Version 6.2.11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6212&quot;&gt;Version 6.2.12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6213&quot;&gt;Version 6.2.13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6214&quot;&gt;Version 6.2.14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6215&quot;&gt;Version 6.2.15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6216&quot;&gt;Version 6.2.16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-6217&quot;&gt;Version 6.2.17&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h1 id=&quot;Export-and-Import-Enhancement&quot;&gt;&lt;a href=&quot;#Export-and-Import-Enhancement&quot; class=&quot;headerlink&quot; title=&quot;Export and Import Enhancement&quot;&gt;&lt;/a&gt;Export and Import Enhancement&lt;/h1&gt;&lt;p&gt;This version brings several enhancements to import and export, One-Click Export to XSLS, Import CSV Files and Preprocess Imported&amp;#x2F;Exported Data(transformer).&lt;/p&gt;
&lt;h2 id=&quot;One-Click-Export-to-XSLS-and-View-as-Spreadsheet-in-Excel&quot;&gt;&lt;a href=&quot;#One-Click-Export-to-XSLS-and-View-as-Spreadsheet-in-Excel&quot; class=&quot;headerlink&quot; title=&quot;One-Click Export to XSLS and View as Spreadsheet in Excel&quot;&gt;&lt;/a&gt;One-Click Export to XSLS and View as Spreadsheet in Excel&lt;/h2&gt;&lt;p&gt;No popup dialog box settings, set various export options, then click execution. The new &amp;quot;One-Click Export to XSLS&amp;quot; feature makes the entire export process quite easy, click Excel icon on toolbar, query results are exported and opened in Excel, now you can continue working with this data within Excel. Note that a XLSX worksheet can contain up to &lt;strong&gt;1,048,576 rows&lt;/strong&gt; of 16384 columns.&lt;/p&gt;
&lt;h3 id=&quot;Click-the-new-excel-icon-in-the-toolbar&quot;&gt;&lt;a href=&quot;#Click-the-new-excel-icon-in-the-toolbar&quot; class=&quot;headerlink&quot; title=&quot;Click the new excel icon in the toolbar&quot;&gt;&lt;/a&gt;Click the new excel icon in the toolbar&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/blog/img/one-click-export-to-xlsx.png&quot; alt=&quot;One-Click Export to XSLS&quot;&gt; &lt;/p&gt;
&lt;h3 id=&quot;View-as-spreadsheet-in-Excel&quot;&gt;&lt;a href=&quot;#View-as-spreadsheet-in-Excel&quot; class=&quot;headerlink&quot; title=&quot;View as spreadsheet in Excel&quot;&gt;&lt;/a&gt;View as spreadsheet in Excel&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/blog/img/one-click-xlsx-result.png&quot; alt=&quot;View as Spreadsheet in Excel&quot;&gt; &lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 6.2 today. This version includes one-click export to XSLX and view as spreadsheet in Excel, object Explorer multiple selection operations, importing CSV files, and other ease-of-use improvements and bug fixes.</p><!-- toc --><ul><li><a href="#export-and-import-enhancement">Export and Import Enhancement</a><ul><li><a href="#one-click-export-to-xsls-and-view-as-spreadsheet-in-excel">One-Click Export to XSLS and View as Spreadsheet in Excel</a><ul><li><a href="#click-the-new-excel-icon-in-the-toolbar">Click the new excel icon in the toolbar</a></li><li><a href="#view-as-spreadsheet-in-excel">View as spreadsheet in Excel</a></li></ul></li><li><a href="#import-csv-file">Import CSV File</a></li><li><a href="#preprocess-importedexported-datatransformer">Preprocess Imported&#x2F;Exported Data(transformer)</a></li></ul></li><li><a href="#other-ease-of-use-improvements">Other Ease-of-use improvements</a><ul><li><a href="#object-explorer-multiple-selection-operations">Object Explorer Multiple Selection Operations</a></li><li><a href="#convert-field-type">Convert Field Type</a></li><li><a href="#minor-improvements-and-bugfix">Minor Improvements and Bugfix</a></li></ul></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-621">Version 6.2.1</a></li><li><a href="#version-622-623">Version 6.2.2-6.2.3</a></li><li><a href="#version-624">Version 6.2.4</a></li><li><a href="#version-625">Version 6.2.5</a></li><li><a href="#version-626">Version 6.2.6</a></li><li><a href="#version-627">Version 6.2.7</a></li><li><a href="#version-628">Version 6.2.8</a></li><li><a href="#version-629">Version 6.2.9</a></li><li><a href="#version-6210">Version 6.2.10</a></li><li><a href="#version-6211">Version 6.2.11</a></li><li><a href="#version-6212">Version 6.2.12</a></li><li><a href="#version-6213">Version 6.2.13</a></li><li><a href="#version-6214">Version 6.2.14</a></li><li><a href="#version-6215">Version 6.2.15</a></li><li><a href="#version-6216">Version 6.2.16</a></li><li><a href="#version-6217">Version 6.2.17</a></li></ul></li></ul><!-- tocstop --><h1><span id="export-and-import-enhancement">Export and Import Enhancement</span></h1><p>This version brings several enhancements to import and export, One-Click Export to XSLS, Import CSV Files and Preprocess Imported&#x2F;Exported Data(transformer).</p><h2><span id="one-click-export-to-xsls-and-view-as-spreadsheet-in-excel">One-Click Export to XSLS and View as Spreadsheet in Excel</span></h2><p>No popup dialog box settings, set various export options, then click execution. The new &quot;One-Click Export to XSLS&quot; feature makes the entire export process quite easy, click Excel icon on toolbar, query results are exported and opened in Excel, now you can continue working with this data within Excel. Note that a XLSX worksheet can contain up to <strong>1,048,576 rows</strong> of 16384 columns.</p><h3><span id="click-the-new-excel-icon-in-the-toolbar">Click the new excel icon in the toolbar</span></h3><p><img src="/blog/img/one-click-export-to-xlsx.png" alt="One-Click Export to XSLS"> </p><h3><span id="view-as-spreadsheet-in-excel">View as spreadsheet in Excel</span></h3><p><img src="/blog/img/one-click-xlsx-result.png" alt="View as Spreadsheet in Excel"> </p><span id="more"></span><h2><span id="import-csv-file">Import CSV File</span></h2><p>The 6.2 version allows you to import csv files and automatically distinguish the delimiters and quote char of csv files. It provides <strong>dynamic typing functionality</strong> that converts numeric, date, boolean, and array data to their types instead of the remaining strings.</p><p><img src="/blog/img/import-csv-dialog.png" alt="Import CSV"> </p><h2><span id="preprocess-importedx2fexported-datatransformer">Preprocess Imported&#x2F;Exported Data(transformer)</span></h2><p>In this version, we have greatly simplified the template code for import and export, and the import and export function now requires only one function. Although the code has become very simple, customization is still powerful, and we now have a parameter called transformer that allows pre-processing of imported and exported data. </p><p>Here is an example of exporting query results to a JSON file. In transformer, we added a field called exportDate to the exported document. The &quot;transformer&quot; returns a <strong>plain object or Promise (object)</strong>, if return null skips this doc.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> params = &#123;</span><br><span class="line">    <span class="attr">filepath</span>: <span class="string">&quot;C:\\temp\\export-data\\little-book.unicorns.json&quot;</span>,</span><br><span class="line">    <span class="attr">connection</span>: <span class="string">&quot;localhost&quot;</span>,</span><br><span class="line">    <span class="attr">db</span>: <span class="string">&quot;little-book&quot;</span>,</span><br><span class="line">    <span class="attr">type</span>: <span class="string">&quot;json&quot;</span>,</span><br><span class="line">    <span class="attr">fields</span>: [],</span><br><span class="line">    <span class="attr">batchSize</span>: <span class="number">2000</span>,</span><br><span class="line">    <span class="comment">//Use the transformer to customize the export result</span></span><br><span class="line">    <span class="attr">transformer</span>:<span class="function">(<span class="params">doc</span>)=&gt;</span>&#123; <span class="comment">//async (doc)=&gt;&#123;</span></span><br><span class="line">      doc[<span class="string">&quot;exportDate&quot;</span>]= <span class="keyword">new</span> <span class="title class_">Date</span>();</span><br><span class="line">      <span class="keyword">return</span> doc; <span class="comment">//return null skips this doc</span></span><br><span class="line">    &#125;,</span><br><span class="line">&#125;;</span><br><span class="line">params.<span class="property">queryScript</span> = <span class="string">`db.unicorns.find(&#123;&#125;)</span></span><br><span class="line"><span class="string">           .sort(&#123;  &quot;_id&quot; : -1 &#125;)</span></span><br><span class="line"><span class="string">           .limit(11)`</span>;</span><br><span class="line"></span><br><span class="line">mb.<span class="title function_">exportQueryToFile</span>(params);</span><br></pre></td></tr></table></figure><p>The following is an example of importing a csv file into a collection. In transformer, we added a field named importDate to the imported document. </p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> contents = [</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">content</span>: <span class="string">&quot;C:\\temp\\import-test\\company\\companies.csv&quot;</span>,</span><br><span class="line">        <span class="attr">collection</span>: <span class="string">&quot;companies&quot;</span>,</span><br><span class="line">        <span class="attr">idPolicy</span>: <span class="string">&quot;overwrite_with_same_id&quot;</span>, <span class="comment">//overwrite_with_same_id|always_insert_with_new_id|insert_with_new_id_if_id_exists|skip_documents_with_existing_id|abort_if_id_already_exists|drop_collection_first|log_errors</span></span><br><span class="line">        <span class="comment">//Use the transformer to customize the import result</span></span><br><span class="line">        <span class="attr">transformer</span>: <span class="function">(<span class="params">doc</span>)=&gt;</span>&#123; <span class="comment">//async (doc)=&gt;&#123;</span></span><br><span class="line">          doc[<span class="string">&quot;importDate&quot;</span>]= <span class="keyword">new</span> <span class="title class_">Date</span>()</span><br><span class="line">          <span class="keyword">return</span> doc; <span class="comment">//return null skips this doc</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">];</span><br><span class="line"></span><br><span class="line">mb.<span class="title function_">importContent</span>(&#123;</span><br><span class="line">    <span class="attr">connection</span>: <span class="string">&quot;localhost&quot;</span>,</span><br><span class="line">    <span class="attr">database</span>: <span class="string">&quot;test&quot;</span>,</span><br><span class="line">    <span class="attr">fromType</span>: <span class="string">&quot;file&quot;</span>,</span><br><span class="line">    <span class="attr">batchSize</span>: <span class="number">2000</span>,</span><br><span class="line">    contents</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h1><span id="other-ease-of-use-improvements">Other Ease-of-use improvements</span></h1><h2><span id="object-explorer-multiple-selection-operations">Object Explorer Multiple Selection Operations</span></h2><p>Object Explorer can use &quot;CTRL&quot; and &quot;Shift&quot; keys to select multiple items, and when it is in a multi-select state, the context menu provides some relevant operations depending on the type of selected node.</p><p>The following figure shows the context menu in the multi-selected state of the Collection node. Unlike &quot;Drop Collection&quot;, &quot;Clear Collection&quot; deletes all documents in the collection, but does not delete the collection itself, nor does it delete its indexes.</p><p><img src="/blog/img/context-menu-multi-select-collection-node.png" alt="Multi-select Collection Node"> </p><h2><span id="convert-field-type">Convert Field Type</span></h2><p>The &quot;convert Field Type&quot; menu item has been added to the right-click menu in the tree view to convert the type of the selected field to the target type. This feature uses <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/convert/">&quot;$convert&quot; operator</a> and <a href="https://docs.mongodb.com/manual/reference/method/db.collection.update/index.html#update-method-agg-pipeline">aggregation pipeline parameter</a>, requires MongoDB server version 4.2 or above. At the same time, we have added a code template called &quot;convertFieldType&quot;, which can be used directly in the script editor.</p><p><img src="/blog/img/convert-field-type-menu-item.png" alt="Convert Field to the Right-Click Menu"> </p><h2><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h2><ul><li>Improved, upgrade MongoDB Node.js driver to the latest 3.6.3.</li><li>Improved, embedded MongoDB Shell to 4.4.1.</li><li>Improved, parse&#x2F;format TLS options in MongoDB Connection String URI.</li><li>Improved, the &quot;capped&quot;&#x2F;&quot;sharded&quot; status is displayed in the subtitle of the collection node.</li><li>Added, &quot;Test Connection&quot; button to the main connections dialog.</li><li>Added, &quot;Copy Report to Clipboard&quot; button to &quot;Test Connection&quot; dialog.</li><li>Fixed, update dependency to resolve remote memory exposure in the &quot;bl&quot; module.</li><li>Fixed, a few high&#x2F;critical vulnerabilities.</li><li>Fixed, an issue where the passwordDigestor option of the method &quot;db.createUser()&quot; did not work.</li><li>Fixed, an exception due to invalid MongoDB Server Semantic Versioning (e.g. 5.1.14.1)</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-621">Version 6.2.1</span></h2><ul><li>Fixed, a killOp MongoError: Expected field &quot;op&quot; to have a numeric type, but a found string.</li><li>Fixed, a single member of a replication set that opens directly on object explorer sometimes does not work properly.</li><li>Fixed, when the collection names is long it wraps the name in the column field in the export dialog.</li></ul><h2><span id="version-622-623">Version 6.2.2-6.2.3</span></h2><ul><li>Fixed, exception occurred when exporting to csv, &quot;Exceeds the maximum number of rows allowed by excel sheet ...&quot;.</li><li>Fixed, a regression error, set the default value of the ssl option sslValidate  back to false.</li><li>Improved, optimize the operation performance of deleting a large number of data rows in table view.</li></ul><h2><span id="version-624">Version 6.2.4</span></h2><ul><li>Fixed, the database selector drop-down menu can only select up to 50 databases.</li><li>Fixed, &quot;db.currentOp()&quot; and &quot;db.killop()&quot; does not work with MongoDB server 3.0.15.</li><li>Fixed, add a $ownOps:true filter to the internal getCurrentOp method to resolve the permission issue.</li><li>Improved, Enhance the implementation of connection pool to better support simultaneous queries.</li></ul><h2><span id="version-625">Version 6.2.5</span></h2><ul><li>Fixed, when querying a task, task manager(schtasks.exe) for non-English version of windows will raise an error.</li><li>Fixed, even if ignored, the renewal warning dialog box will be forced to pop up.</li><li>Improved, when using MongoDB URI for fast connection, duplicate name checking has been added to ensure that the connection name is unique.</li><li>Improved, enhanced document viewer and field value editor that allows you to maximize, drag, and limit the left and upper boundaries of the container</li><li>Changed, for non-registered users, the export function is limited to a maximum of 10000 documents.</li></ul><h2><span id="version-626">Version 6.2.6</span></h2><ul><li>Fixed, a SQL Export regression error, the table name is displayed as &quot;undefined&quot; when exporting collection to a SQL file.</li></ul><h2><span id="version-627">Version 6.2.7</span></h2><ul><li>Fixed, a connection regression error, fast connection with MongoDB URI does not work in some cases.</li></ul><h2><span id="version-628">Version 6.2.8</span></h2><ul><li>Fixed, GridFS upload error, when the size of the uploaded file is less than 256k, the null characters are incorrectly filled.</li></ul><h2><span id="version-629">Version 6.2.9</span></h2><ul><li>Fixed, Tree&#x2F;Table View - Copy and export ObjectId&#39;s by just their value.</li><li>Fixed, Code generator - fix database name issue.</li><li>Fixed, Connection Tree - the multi-selection state is sometimes confused so that the object cannot be opened when the tree node is double-clicked.</li><li>Improved, Tree View - Keyboard shortcuts have been added, press Return to edit in place, and press Alt+Down to pop up the details editor.</li></ul><h2><span id="version-6210">Version 6.2.10</span></h2><ul><li>Fixed, Sub documents that include the _ id field cannot be displayed in table view.</li><li>Fixed, The function of dumping all databases in the connection does not work.</li><li>Fixed, Popup-Editor - After saving, the JSON- string containing special characters (\n) or (\r) is corrupted.</li></ul><h2><span id="version-6211">Version 6.2.11</span></h2><ul><li>Fixed, a CSV export column shift error.</li><li>Fixed, importing using mongorestore will create an invalid MongoDB URI (required &#x2F; before querying parameters).</li><li>Improved, enable copying LUUID text from contextual menu instead of only BinData.</li><li>Improved, allows you to use the keyboard &quot;down&quot; key or &quot;alt+down&quot; to pop up the drop-down list.</li><li>Improved, turn on the &quot;CopyWithEmptySelection&quot; option in the editor, allowing you to copy&#x2F;cut the current line with empty selection.</li><li>Improved, document viewer reload feature that forces retrieval and refresh from the server when the &quot;Reload&quot; button is clicked.</li></ul><h2><span id="version-6212">Version 6.2.12</span></h2><ul><li>Improved, schema analyzer - the execution efficiency of schema analyzer is greatly improved, and the memory usage of big collection full table scan  is also greatly reduced.</li><li>Added, How to turn off Hardware Acceleration? Menu Options -&gt; Options That May Affect Performance -&gt; Disable Hardware Acceleration.</li><li>Fixed, Add the missing global variable &quot;Buffer&quot;.</li></ul><h2><span id="version-6213">Version 6.2.13</span></h2><ul><li>Fixed, schema analyzer - an &quot;combine result&quot; exception when the size of collection is exactly an integer multiple of 1000.</li><li>Fixed, value editor - no horizontal scrollbar issue in some cases.</li><li>Fixed, pasted multi-line scripts may cause code completion to fail in windows systems.</li></ul><h2><span id="version-6214">Version 6.2.14</span></h2><ul><li>Added, support MONGODB-AWS Authentication (require commercial license).</li><li>Improved, field type conversion - support array nested elements and _ id field.</li><li>Improved, task manager - allow you to edit tasks where the database connection is no longer valid.</li><li>Improved, typing definition for aggregationCursor.out() and aggregationCursor.merge() method.</li></ul><h2><span id="version-6215">Version 6.2.15</span></h2><ul><li>Fixed, bug where binary type would be incorrectly formatted as UUID when exported to excel XSLX file.</li><li>Fixed, error in adding duplicate log information.</li><li>Fixed, several spelling mistakes.</li></ul><h2><span id="version-6216">Version 6.2.16</span></h2><ul><li>Fixed, the authentication error of the SSH connection could not be displayed.</li><li>Fixed, in some cases the context of the database is incorrect after restarting and restoring the workspace.</li><li>Fixed, the progress percentage is displayed incorrectly when exporting the selected records.</li></ul><h2><span id="version-6217">Version 6.2.17</span></h2><ul><li>Improved, Support for connecting to MongoDB 5.0.</li><li>Fixed, UI freeze error occurs when there are thousands of databases in the code editor&#39;s database drop-down list.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Import/">Import</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Export/">Export</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Excel/">Excel</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/CSV/">CSV</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-62/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 6.1 Released! official support for MongoDB 4.4</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-61/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-61/</guid>
      <pubDate>Fri, 14 Aug 2020 06:20:00 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 6.1 today. This version includes official support for MongoDB 4.4, SQL exclude column, SQL UNION, Table view filter row along with some useful improvements and bugfix. For more information on MongoDB 4.4 , see &lt;a href=&quot;https://docs.mongodb.com/manual/release-notes/4.4/&quot;&gt;Release Notes for MongoDB 4.4&lt;/a&gt;.&lt;/p&gt;
&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-44-support&quot;&gt;MongoDB 4.4 support&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#union-all-unionwith-stage-and-new-aggregation-operators&quot;&gt;Union All ($unionWith Stage) and New Aggregation Operators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sql-query-improvements&quot;&gt;SQL Query Improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#exclude-columns-in-a-sql-query&quot;&gt;Exclude Columns in a SQL Query&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sql-union-and-union-all-mongodb-44&quot;&gt;SQL UNION and UNION ALL (MongoDB 4.4+)&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#union-operatordoes-not-contains-duplicates&quot;&gt;UNION Operator(does not contains duplicates)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#union-all-operatorallow-duplicate-values&quot;&gt;UNION ALL Operator(allow duplicate values)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-44-new-expressions-as-sql-functions&quot;&gt;MongoDB 4.4 New Expressions as SQL Functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#mongodb-44-log-viewer&quot;&gt;MongoDB 4.4 Log Viewer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-improvements&quot;&gt;Other Improvements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#table-view-toggle-filter-row&quot;&gt;Table View - Toggle Filter Row&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#autosave-working-state-every-minute&quot;&gt;AutoSave Working State Every Minute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#add-the-runexecute-command-to-the-right-click-menu-of-the-script-editor&quot;&gt;Add the Run&amp;#x2F;Execute Command to the Right-Click Menu of the Script Editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#minor-improvements-and-bugfix&quot;&gt;Minor Improvements and Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#patch-releases&quot;&gt;Patch Releases&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#version-611-613&quot;&gt;Version 6.1.1-6.1.3&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bugfix&quot;&gt;Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-614&quot;&gt;Version 6.1.4&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bugfix-1&quot;&gt;Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-615-616&quot;&gt;Version 6.1.5-6.1.6&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bugfix-2&quot;&gt;Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-617&quot;&gt;Version 6.1.7&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bugfix-3&quot;&gt;Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#version-618&quot;&gt;Version 6.1.8&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bugfix-4&quot;&gt;Bugfix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;

&lt;h1 id=&quot;MongoDB-4-4-support&quot;&gt;&lt;a href=&quot;#MongoDB-4-4-support&quot; class=&quot;headerlink&quot; title=&quot;MongoDB 4.4 support&quot;&gt;&lt;/a&gt;MongoDB 4.4 support&lt;/h1&gt;&lt;p&gt;NoSQLBooster for MongoDB 6.1 upgrades the MongoDB Node.js driver to the latest 3.6 and embedded MongoDB Shell to 4.4, adding support for all the new mongo shell methods and aggregation operators of MongoDB 4.4.&lt;/p&gt;
&lt;h2 id=&quot;Union-All-unionWith-Stage-and-New-Aggregation-Operators&quot;&gt;&lt;a href=&quot;#Union-All-unionWith-Stage-and-New-Aggregation-Operators&quot; class=&quot;headerlink&quot; title=&quot;Union All ($unionWith Stage) and New Aggregation Operators&quot;&gt;&lt;/a&gt;Union All ($unionWith Stage) and New Aggregation Operators&lt;/h2&gt;&lt;p&gt;MongoDB 4.4 adds the $unionWith aggregation stage, providing the ability to combines pipeline results from multiple collections into a single result set. NoSQLBooster 6.1 adds &amp;quot;unionWith&amp;quot; chain method to AggregationCursor and provide the appropriate code snippets and mouse hover information to support code completion. In addition to the enhanced chain method, NoSQLBooster also enhances SQL queries to support &lt;em&gt;&lt;strong&gt;SQL UNION and UNION ALL&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;suppliers&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;project&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;state,-_id&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;unionWith&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;coll&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;warehouses&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;pipeline&lt;/span&gt;: [&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;attr&quot;&gt;$project&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;Equivalent to the following MongoShell script, but more concise, and easy to write,  not to mention code completion.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;suppliers&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;([&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;$project&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;, &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;$unionWith&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;coll&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;warehouses&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;pipeline&lt;/span&gt;: [&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;attr&quot;&gt;$project&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;attr&quot;&gt;state&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;])&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;NoSQLBooster 6.1 also enhanced mouse hover for all new aggregation chain methods and aggregation Operators. In addition to method and type definitions, hover is now able to display document and example for these aggregation chained methods.&lt;/p&gt;
&lt;h1 id=&quot;SQL-Query-Improvements&quot;&gt;&lt;a href=&quot;#SQL-Query-Improvements&quot; class=&quot;headerlink&quot; title=&quot;SQL Query Improvements&quot;&gt;&lt;/a&gt;SQL Query Improvements&lt;/h1&gt;&lt;h2 id=&quot;Exclude-Columns-in-a-SQL-Query&quot;&gt;&lt;a href=&quot;#Exclude-Columns-in-a-SQL-Query&quot; class=&quot;headerlink&quot; title=&quot;Exclude Columns in a SQL Query&quot;&gt;&lt;/a&gt;Exclude Columns in a SQL Query&lt;/h2&gt;&lt;p&gt;NoSQLBooster6.1 extends the syntax of the SQL query. You can exclude the selected columns from the query results by adding a &lt;em&gt;&lt;strong&gt;minus sign (eg. -_id)&lt;/strong&gt;&lt;/em&gt; to the name of the columns. The MongoDB query implicitly returns the _id field, see the following example to exclude the _id column from the query result. &lt;/p&gt;
&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; number, concat(first_name,&lt;span class=&quot;string&quot;&gt;&amp;#x27; &amp;#x27;&lt;/span&gt;,last_name) &lt;span class=&quot;keyword&quot;&gt;as&lt;/span&gt; name, salary,&lt;span class=&quot;operator&quot;&gt;-&lt;/span&gt;_id &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; employees&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//javascript&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;use &lt;span class=&quot;title class_&quot;&gt;NoSQLBoosterSamples&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//prepare test data&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;employees&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insert&lt;/span&gt;([   &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;&lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;number&amp;quot;&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1001&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;last_name&amp;quot;&lt;/span&gt;:&lt;span class=&quot;string&quot;&gt;&amp;quot;Smith&amp;quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;first_name&amp;quot;&lt;/span&gt;:&lt;span class=&quot;string&quot;&gt;&amp;quot;John&amp;quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;salary&amp;quot;&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;62000&lt;/span&gt;,&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;&lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;number&amp;quot;&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1002&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;last_name&amp;quot;&lt;/span&gt;:&lt;span class=&quot;string&quot;&gt;&amp;quot;Anderson&amp;quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;first_name&amp;quot;&lt;/span&gt;:&lt;span class=&quot;string&quot;&gt;&amp;quot;Jane&amp;quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;salary&amp;quot;&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;57500&lt;/span&gt;&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//Let&amp;#x27;s fetch the first_name, last_name and salary fields of the employees available in employees table and &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//sort the result in the descending order by salary.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//use -_id to exclude _id column&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mb.&lt;span class=&quot;title function_&quot;&gt;runSQLQuery&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    SELECT number, concat(first_name,&amp;#x27; &amp;#x27;,last_name) as name, salary,-_id FROM employees&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;`&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;The result of the query is as follows, and the _ id field has been excluded&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;number&lt;/th&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;salary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;John Smith&lt;/td&gt;
&lt;td&gt;62000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;Jane Anderson&lt;/td&gt;
&lt;td&gt;57500&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 6.1 today. This version includes official support for MongoDB 4.4, SQL exclude column, SQL UNION, Table view filter row along with some useful improvements and bugfix. For more information on MongoDB 4.4 , see <a href="https://docs.mongodb.com/manual/release-notes/4.4/">Release Notes for MongoDB 4.4</a>.</p><!-- toc --><ul><li><a href="#mongodb-44-support">MongoDB 4.4 support</a><ul><li><a href="#union-all-unionwith-stage-and-new-aggregation-operators">Union All ($unionWith Stage) and New Aggregation Operators</a></li></ul></li><li><a href="#sql-query-improvements">SQL Query Improvements</a><ul><li><a href="#exclude-columns-in-a-sql-query">Exclude Columns in a SQL Query</a></li><li><a href="#sql-union-and-union-all-mongodb-44">SQL UNION and UNION ALL (MongoDB 4.4+)</a><ul><li><a href="#union-operatordoes-not-contains-duplicates">UNION Operator(does not contains duplicates)</a></li><li><a href="#union-all-operatorallow-duplicate-values">UNION ALL Operator(allow duplicate values)</a></li></ul></li><li><a href="#mongodb-44-new-expressions-as-sql-functions">MongoDB 4.4 New Expressions as SQL Functions</a></li><li><a href="#mongodb-44-log-viewer">MongoDB 4.4 Log Viewer</a></li></ul></li><li><a href="#other-improvements">Other Improvements</a><ul><li><a href="#table-view-toggle-filter-row">Table View - Toggle Filter Row</a></li><li><a href="#autosave-working-state-every-minute">AutoSave Working State Every Minute</a></li><li><a href="#add-the-runexecute-command-to-the-right-click-menu-of-the-script-editor">Add the Run&#x2F;Execute Command to the Right-Click Menu of the Script Editor</a></li><li><a href="#minor-improvements-and-bugfix">Minor Improvements and Bugfix</a></li></ul></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-611-613">Version 6.1.1-6.1.3</a><ul><li><a href="#bugfix">Bugfix</a></li></ul></li><li><a href="#version-614">Version 6.1.4</a><ul><li><a href="#bugfix-1">Bugfix</a></li></ul></li><li><a href="#version-615-616">Version 6.1.5-6.1.6</a><ul><li><a href="#bugfix-2">Bugfix</a></li></ul></li><li><a href="#version-617">Version 6.1.7</a><ul><li><a href="#bugfix-3">Bugfix</a></li></ul></li><li><a href="#version-618">Version 6.1.8</a><ul><li><a href="#bugfix-4">Bugfix</a></li></ul></li></ul></li></ul><!-- tocstop --><h1><span id="mongodb-44-support">MongoDB 4.4 support</span></h1><p>NoSQLBooster for MongoDB 6.1 upgrades the MongoDB Node.js driver to the latest 3.6 and embedded MongoDB Shell to 4.4, adding support for all the new mongo shell methods and aggregation operators of MongoDB 4.4.</p><h2><span id="union-all-unionwith-stage-and-new-aggregation-operators">Union All ($unionWith Stage) and New Aggregation Operators</span></h2><p>MongoDB 4.4 adds the $unionWith aggregation stage, providing the ability to combines pipeline results from multiple collections into a single result set. NoSQLBooster 6.1 adds &quot;unionWith&quot; chain method to AggregationCursor and provide the appropriate code snippets and mouse hover information to support code completion. In addition to the enhanced chain method, NoSQLBooster also enhances SQL queries to support <em><strong>SQL UNION and UNION ALL</strong></em>.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">suppliers</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">    .<span class="title function_">project</span>(<span class="string">&quot;state,-_id&quot;</span>)</span><br><span class="line">    .<span class="title function_">unionWith</span>(&#123;</span><br><span class="line">        <span class="attr">coll</span>: <span class="string">&quot;warehouses&quot;</span>,</span><br><span class="line">        <span class="attr">pipeline</span>: [&#123;</span><br><span class="line">            <span class="attr">$project</span>: &#123; <span class="attr">state</span>: <span class="number">1</span>, <span class="attr">_id</span>: <span class="number">0</span> &#125;</span><br><span class="line">        &#125;]</span><br><span class="line">    &#125;)</span><br></pre></td></tr></table></figure><p>Equivalent to the following MongoShell script, but more concise, and easy to write,  not to mention code completion.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">suppliers</span>.<span class="title function_">aggregate</span>([&#123;</span><br><span class="line">    <span class="attr">$project</span>: &#123;</span><br><span class="line">        <span class="attr">state</span>: <span class="number">1</span>,</span><br><span class="line">        <span class="attr">_id</span>: <span class="number">0</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;, &#123;</span><br><span class="line">    <span class="attr">$unionWith</span>: &#123;</span><br><span class="line">        <span class="attr">coll</span>: <span class="string">&quot;warehouses&quot;</span>,</span><br><span class="line">        <span class="attr">pipeline</span>: [&#123;</span><br><span class="line">            <span class="attr">$project</span>: &#123;</span><br><span class="line">                <span class="attr">state</span>: <span class="number">1</span>,</span><br><span class="line">                <span class="attr">_id</span>: <span class="number">0</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;]</span><br><span class="line">    &#125;</span><br><span class="line">&#125;])</span><br></pre></td></tr></table></figure><p>NoSQLBooster 6.1 also enhanced mouse hover for all new aggregation chain methods and aggregation Operators. In addition to method and type definitions, hover is now able to display document and example for these aggregation chained methods.</p><h1><span id="sql-query-improvements">SQL Query Improvements</span></h1><h2><span id="exclude-columns-in-a-sql-query">Exclude Columns in a SQL Query</span></h2><p>NoSQLBooster6.1 extends the syntax of the SQL query. You can exclude the selected columns from the query results by adding a <em><strong>minus sign (eg. -_id)</strong></em> to the name of the columns. The MongoDB query implicitly returns the _id field, see the following example to exclude the _id column from the query result. </p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> number, concat(first_name,<span class="string">&#x27; &#x27;</span>,last_name) <span class="keyword">as</span> name, salary,<span class="operator">-</span>_id <span class="keyword">FROM</span> employees</span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//javascript</span></span><br><span class="line">use <span class="title class_">NoSQLBoosterSamples</span></span><br><span class="line"><span class="comment">//prepare test data</span></span><br><span class="line">db.<span class="property">employees</span>.<span class="title function_">insert</span>([   </span><br><span class="line">    &#123;<span class="attr">_id</span>:<span class="number">1</span>, <span class="string">&quot;number&quot;</span>:<span class="number">1001</span>,<span class="string">&quot;last_name&quot;</span>:<span class="string">&quot;Smith&quot;</span>,<span class="string">&quot;first_name&quot;</span>:<span class="string">&quot;John&quot;</span>,<span class="string">&quot;salary&quot;</span>:<span class="number">62000</span>,&#125;,</span><br><span class="line">    &#123;<span class="attr">_id</span>:<span class="number">2</span>, <span class="string">&quot;number&quot;</span>:<span class="number">1002</span>,<span class="string">&quot;last_name&quot;</span>:<span class="string">&quot;Anderson&quot;</span>,<span class="string">&quot;first_name&quot;</span>:<span class="string">&quot;Jane&quot;</span>,<span class="string">&quot;salary&quot;</span>:<span class="number">57500</span>&#125;,</span><br><span class="line">]);</span><br><span class="line"></span><br><span class="line"><span class="comment">//Let&#x27;s fetch the first_name, last_name and salary fields of the employees available in employees table and </span></span><br><span class="line"><span class="comment">//sort the result in the descending order by salary.</span></span><br><span class="line"><span class="comment">//use -_id to exclude _id column</span></span><br><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    SELECT number, concat(first_name,&#x27; &#x27;,last_name) as name, salary,-_id FROM employees</span></span><br><span class="line"><span class="string">      </span></span><br><span class="line"><span class="string">`</span>);</span><br></pre></td></tr></table></figure><p>The result of the query is as follows, and the _ id field has been excluded</p><table><thead><tr><th>number</th><th>name</th><th>salary</th></tr></thead><tbody><tr><td>1001</td><td>John Smith</td><td>62000</td></tr><tr><td>1002</td><td>Jane Anderson</td><td>57500</td></tr></tbody></table><span id="more"></span><h2><span id="sql-union-and-union-all-mongodb-44">SQL UNION and UNION ALL (MongoDB 4.4+)</span></h2><p>In addition to the enhanced aggregate cursor chain method(unionWith), NoSQLBooster also enhances SQL queries to support SQL UNION and UNION ALL. The SQL UNION statement is translated into $unionWith Aggregation Stage of MongoDB.</p><h3><span id="union-operatordoes-not-contains-duplicates">UNION Operator(does not contains duplicates)</span></h3><p>The UNION operator selects only distinct values by default. </p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> state, <span class="operator">-</span>_id <span class="keyword">FROM</span> suppliers <span class="keyword">UNION</span> <span class="keyword">SELECT</span> state, <span class="operator">-</span>_id <span class="keyword">from</span> warehouses</span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//javascript</span></span><br><span class="line"></span><br><span class="line">use <span class="title class_">NoSQLBoosterSamples</span></span><br><span class="line"></span><br><span class="line">db.<span class="property">suppliers</span>.<span class="title function_">drop</span>(); <span class="comment">//prepare data</span></span><br><span class="line">db.<span class="property">suppliers</span>.<span class="title function_">insertMany</span>([</span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">1</span>, <span class="attr">supplier</span>: <span class="string">&quot;Aardvark and Sons&quot;</span>, <span class="attr">state</span>: <span class="string">&quot;Texas&quot;</span> &#125;,</span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">2</span>, <span class="attr">supplier</span>: <span class="string">&quot;Bears Run Amok.&quot;</span>, <span class="attr">state</span>: <span class="string">&quot;Colorado&quot;</span>&#125;,</span><br><span class="line">])</span><br><span class="line"></span><br><span class="line">db.<span class="property">warehouses</span>.<span class="title function_">drop</span>();</span><br><span class="line">db.<span class="property">warehouses</span>.<span class="title function_">insertMany</span>([</span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">2</span>, <span class="attr">warehouse</span>: <span class="string">&quot;B&quot;</span>, <span class="attr">region</span>: <span class="string">&quot;Central&quot;</span>, <span class="attr">state</span>: <span class="string">&quot;Colorado&quot;</span>&#125;,</span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">3</span>, <span class="attr">warehouse</span>: <span class="string">&quot;C&quot;</span>, <span class="attr">region</span>: <span class="string">&quot;East&quot;</span>, <span class="attr">state</span>: <span class="string">&quot;Florida&quot;</span> &#125;,</span><br><span class="line">])</span><br><span class="line"></span><br><span class="line"> mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string">    SELECT state, -_id FROM suppliers UNION SELECT state, -_id from warehouses</span></span><br><span class="line"><span class="string">`</span>)</span><br></pre></td></tr></table></figure><p>The result of the query is as follows</p><table><thead><tr><th>state</th></tr></thead><tbody><tr><td>Texas</td></tr><tr><td>Florida</td></tr><tr><td>Colorado</td></tr></tbody></table><p>As can be seen from the returned documents, the result set does not contain duplicates.</p><h3><span id="union-all-operatorallow-duplicate-values">UNION ALL Operator(allow duplicate values)</span></h3><p>To allow duplicate values, use UNION ALL:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> state, <span class="operator">-</span>_id <span class="keyword">FROM</span> suppliers <span class="keyword">UNION</span> <span class="keyword">ALL</span> <span class="keyword">SELECT</span> state, <span class="operator">-</span>_id <span class="keyword">from</span> warehouses</span><br></pre></td></tr></table></figure><p>The result of the query is as follows</p><table><thead><tr><th>state</th></tr></thead><tbody><tr><td>Texas</td></tr><tr><td>Colorado</td></tr><tr><td>Colorado</td></tr><tr><td>Florida</td></tr></tbody></table><h2><span id="mongodb-44-new-expressions-as-sql-functions">MongoDB 4.4 New Expressions as SQL Functions</span></h2><p>NoSQLBooster 6.1 allows all new Mongodb4.4 aggregation expressions to be used as SQL function in SQL statements. </p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">use <span class="title class_">NoSQLBoosterSamples</span></span><br><span class="line">db.<span class="property">myColl</span>.<span class="title function_">drop</span>(); <span class="comment">//prepare data</span></span><br><span class="line">db.<span class="property">myColl</span>.<span class="title function_">insertMany</span>([</span><br><span class="line">   &#123; <span class="attr">_id</span>: <span class="number">1</span>, <span class="attr">name</span>: <span class="string">&quot;cup after cup of coffee&quot;</span> &#125;,</span><br><span class="line">])</span><br><span class="line"></span><br><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">SELECT </span></span><br><span class="line"><span class="string">    binarySize(&#x27;重庆小面&#x27;) as binary_size, -- 12 Each character is encoded using three bytes. Returns the size of a given string or binary data value’s content in bytes.</span></span><br><span class="line"><span class="string">    bsonSize(toJS(a=1,b=2)) as bson_size, -- 27 Returns the size in bytes of a given document (bsontype Object) </span></span><br><span class="line"><span class="string">    first([1,2,3]) as first_item, --1 Returns the first element in an array.</span></span><br><span class="line"><span class="string">    last([1,2,3]) as last_item, --3 Returns the last element in an array.</span></span><br><span class="line"><span class="string">    isNumber(123) as int_is_number, --true checks if the specified expression resolves to one of the following numeric BSON types:</span></span><br><span class="line"><span class="string">    isNumber(&#x27;123&#x27;) as str_is_not_number, --false</span></span><br><span class="line"><span class="string">    replaceOne(name,&#x27;cup&#x27;,&#x27;CUP&#x27;) as repalce_one, --Replaces the first instance of a matched string in a given input.</span></span><br><span class="line"><span class="string">    replaceAll(name,&#x27;cup&#x27;,&#x27;Cup&#x27;) as repalce_all, -- Replaces all instances of a matched string in a given input.</span></span><br><span class="line"><span class="string">    -_id</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">FROM myColl       </span></span><br><span class="line"><span class="string">`</span>)</span><br></pre></td></tr></table></figure><p>The result of the query is as follows</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;binary_size&quot;</span> <span class="punctuation">:</span> <span class="number">12</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;bson_size&quot;</span> <span class="punctuation">:</span> <span class="number">27</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;first_item&quot;</span> <span class="punctuation">:</span> <span class="number">1</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;last_item&quot;</span> <span class="punctuation">:</span> <span class="number">3</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;int_is_number&quot;</span> <span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;str_is_not_number&quot;</span> <span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;repalce_one&quot;</span> <span class="punctuation">:</span> <span class="string">&quot;CUP after cup of coffee&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;repalce_all&quot;</span> <span class="punctuation">:</span> <span class="string">&quot;Cup after Cup of coffee&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2><span id="mongodb-44-log-viewer">MongoDB 4.4 Log Viewer</span></h2><p>Starting in MongoDB 4.4, mongod&#x2F;mongos instances now output all log messages in <a href="https://docs.mongodb.com/manual/reference/log-messages/#log-message-json-output-format">structured JSON format</a>. NoSQLBooster 6.1 supports parsing the structured JSON format log of the new MongoDB 4.4, as well as the plain text log before MongoDB 4.4.</p><!-- more --><h1><span id="other-improvements">Other Improvements</span></h1><h2><span id="table-view-toggle-filter-row">Table View - Toggle Filter Row</span></h2><p>The new filter row allows end-users to filter grid data by typing text directly into the row. The filter row is scoped <em><strong>only to data on the current page</strong></em>.<br>To display filter rows at the top of the table view, press &quot;CTRL+SHIFT+L&quot; or click the &quot;filter&quot; icon in the data View toolbar.</p><p><img src="/blog/img/table-view-filter-row.gif" alt="Filter Row"> </p><h2><span id="autosave-working-state-every-minute">AutoSave Working State Every Minute</span></h2><p>NoSQLBooster 6.1 automatically saves changes to the workspace every minute you work. You can toggle this option in the &quot;Menu -&gt; Options -&gt; AutoSave Working State Every Minute&quot;.</p><h2><span id="add-the-runx2fexecute-command-to-the-right-click-menu-of-the-script-editor">Add the Run&#x2F;Execute Command to the Right-Click Menu of the Script Editor</span></h2><p><img src="/blog/img/right-click-run-command.png" alt="Run&#x2F;Execute Command to the Right-Click Menu"> </p><h2><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h2><ul><li>Improved, upgrade MongoDB Node.js driver to the latest 3.6.</li><li>Improved, embedded MongoDB Shell to 4.4.0.</li><li>Improved, saving, and restoring table view state.</li><li>Improved, split the paths of mongo shell and mongo tools in the configuration, allowing the two paths to be configured separately.</li><li>Fixed, automatically resize the in-place editor.</li><li>Fixed, Favorites, when the file is saved, the file should be saved first over collection in the favorites menu item.</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-611-613">Version 6.1.1-6.1.3</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Added, Add the Run&#x2F;Execute Command to the Right-Click Menu of the Script Editor.</li><li>Improved, allow &quot;--no-sandbox&quot; switch to linux AppImage. </li><li>Fixed, Connection Tree- connection node read-only icon status error.</li></ul><h2><span id="version-614">Version 6.1.4</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, Query Builder, If the two rules have the same name, the generated query ignores &quot;AND&quot;</li></ul><h2><span id="version-615-616">Version 6.1.5-6.1.6</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, Right-Click Drop User or Drop role appears to try and drop from the wrong database. <a href="https://mongobooster.useresponse.com/topic/624-right-click-drop-user-or-drop-role-appears-to-try-and-drop-from-the-wrong-database">ref#</a></li><li>Fixed, Ports not accepted with Atlas <code>mongodb+srv</code> URIs over SSH. <a href="https://mongobooster.useresponse.com/topic/625-ports-not-accepted-with-mongodbsrv-uris">ref#</a></li></ul><h2><span id="version-617">Version 6.1.7</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, Importing documents from the clipboard does not work</li><li>Fixed, MongoImport&#x2F;MongoExport GUI, fixed a connection error when the connection is &quot;mongodb+uri&quot; over SSH</li><li>Added, MongoImport GUI, add cli option --useArrayIndexFields (Interpret natural numbers in fields as array indexes when importing csv or tsv files. New in mongoimport version 100.0.0.)</li><li>Added, Connection SSL Options TAB, Added support for custom Server Name Indication (SNI) when using SSL connections</li></ul><h2><span id="version-618">Version 6.1.8</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, When exporting a CSV file, the BOM character is mistakenly added to each chunk.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Aggregation/">Aggregation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL/">SQL</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-4/">MongoDB4.4</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Filter/">Filter</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL-UNION/">SQL UNION</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-61/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 6.0 Released!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-60/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-60/</guid>
      <pubDate>Mon, 25 May 2020 02:00:01 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we are incredibly pleased to announce the release of NoSQLBooster 6.0. It brings many new features to improve the productivity of MongoDB&amp;#39;ers, tasks and task scheduler, command-line interface, Golang, PHP and Ruby added to query code, ESNext features optional chaining and nullish coalescing,  mark types with colors, greatly improved table view, one-click projection, add date time to export file path, favorites feature and more. &lt;/p&gt;
&lt;p&gt;If you want to try NoSQLBooster 6.0 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 6.0 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 6.0.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v6-main.png&quot; alt=&quot;Main interface&quot;&gt; &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s dive in and get an overview of what&amp;#39;s coming in NoSQLBooster 6.0!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we are incredibly pleased to announce the release of NoSQLBooster 6.0. It brings many new features to improve the productivity of MongoDB&#39;ers, tasks and task scheduler, command-line interface, Golang, PHP and Ruby added to query code, ESNext features optional chaining and nullish coalescing,  mark types with colors, greatly improved table view, one-click projection, add date time to export file path, favorites feature and more. </p><p>If you want to try NoSQLBooster 6.0 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 6.0 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after a successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free version is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>The following figure shows the main interface of version 6.0.</p><p><img src="/blog/img/v6-main.png" alt="Main interface"> </p><p>Let&#39;s dive in and get an overview of what&#39;s coming in NoSQLBooster 6.0!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><span id="more"></span><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#tasks-and-task-scheduler">Tasks and task scheduler</a></li><li><a href="#nosqlbooster-command-line-interface-nbcli">NoSQLBooster command-line interface (nbcli)</a></li><li><a href="#esnext-features-optional-chaining-and-nullish-coalescing">ESNext features, optional chaining, and nullish coalescing</a><ul><li><a href="#optional-chaining">Optional chaining</a></li><li><a href="#nullish-coalescing">Nullish coalescing</a></li></ul></li><li><a href="#golang-php-and-ruby-added-to-query-code-converter">Golang, PHP and Ruby added to query code converter</a></li><li><a href="#enhanced-data-view">Enhanced data view</a><ul><li><a href="#mark-types-with-colors">Mark types with colors</a></li><li><a href="#greatly-improved-table-view">Greatly improved table view</a><ul><li><a href="#table-view-in-place-edit">Table-View | In-place edit</a></li><li><a href="#table-view-column-chooser">Table-View | Column chooser</a></li><li><a href="#table-view-column-moving-and-freeze-columns">Table-View | Column-moving and freeze columns</a></li></ul></li><li><a href="#one-click-projection-and-one-click-sorting">One-click projection and One-click sorting</a></li><li><a href="#tooltip-improvements">Tooltip Improvements</a></li></ul></li><li><a href="#favorites-feature">Favorites Feature</a></li><li><a href="#sql-query-improvements">SQL query improvements</a></li><li><a href="#other-notable-improvements">Other Notable Improvements</a><ul><li><a href="#add-date-time-to-export-file-path">Add date time to export file path</a></li><li><a href="#export-non-cursor-objects">Export non-cursor objects</a></li><li><a href="#saverestore-workspace-improvements">Save&#x2F;Restore Workspace Improvements</a></li><li><a href="#new-aggregationcursorpushstage-method">New AggregationCursor.pushStage method</a></li></ul></li><li><a href="#minor-improvements-and-bugfix">Minor improvements and bugfix</a></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-601-602">Version 6.0.1-6.0.2</a><ul><li><a href="#bugfix">Bugfix</a></li></ul></li><li><a href="#version-603">Version 6.0.3</a><ul><li><a href="#bugfix-1">Bugfix</a></li></ul></li><li><a href="#version-604">Version 6.0.4</a><ul><li><a href="#bugfix-2">Bugfix</a></li></ul></li><li><a href="#version-605">Version 6.0.5</a></li></ul></li></ul><!-- tocstop --><h1><span id="tasks-and-task-scheduler">Tasks and task scheduler</span></h1><p>NoSQLBooster tasks allow you to define, save, and perform different tasks, including query scripts, imports, exports, data migration, and backup and restoration. Task Scheduler lets you define tasks that execute on a one-time basis or a recurring schedule that you specify.  It supports tasks that perform daily, weekly, or monthly, and you can choose the day(s) of the week or month when you want each task to execute.</p><p><em><strong>NoSQLBooster does not need to run at the scheduled time to run any scheduled tasks. In windows systems, NoSQLBooster uses the <a href="https://www.windowscentral.com/how-create-automated-task-using-task-scheduler-windows-10">Windows Task Scheduler</a> to perform routine tasks automatically. While in MacOS and ubuntu, <a href="https://crontab.guru/">cron</a> is used to manage and execute scheduled tasks.</strong></em>  </p><p>NoSQLBooster supports the following types of tasks.</p><ul><li>Run MongoDB Script File (<em><strong>As NoSQLBooster allows you to use 3rd party node modules, the functionality of this script is extensible and flexible</strong></em>)</li><li>Import from JSON and BSON files...</li><li>Import Tables from MySQL, PostgreSQL, and MSSQL...</li><li>Restore MongoDB Databases (mongorestore)</li><li>Export Collection&#x2F;Query to JSON, BSON, CSV|TSV and SQL</li><li>Export Database to JSON, BSON, CSV|TSV, and SQL</li><li>Backup MongoDB Databases (mongodump)</li></ul><p>The task view allows you to view all scheduled tasks at a glance easily.</p><p><img src="/blog/img/tasks-dialog.png" alt="Tasks - new task"> </p><p><img src="/blog/img/task-scheduler.png" alt="Tasks - scheduler"> </p><p>For Windows User, You can find the tasks generated by NoSQLBooster in the URI &quot;Task Scheduler(local)\Task Scheduler Library\NoSQLBooster\MongoDB\&quot;.<br><img src="/blog/img/windows-task-scheduler.png" alt="Tasks - windows task scheduler"> </p><h1><span id="nosqlbooster-command-line-interface-nbcli">NoSQLBooster command-line interface (nbcli)</span></h1><p>This nbcli is a simple command-line interface for NoSQLBooster. It allows you to run javascript or SQL query statement, javascript file, and NoSQLBooster tasks in terminal or integrate NoSQLBooster into your continuous development.  This nbcli supports all NoSQLBooster shell extensions, SQL Query, fluent Query API, 3rd party library (lodash, momentjs ...) and Node.js modules installed under user data directory (Menu-&gt; Help-&gt; Open User Data directory)</p><p>To start nbcli, click &quot;Menu -&gt; Tools -&gt; Open NoSQLBooster Command Line ...&quot;, you can use &quot;Menu -&gt; Options -&gt; Add Command Line to path...&quot; to add nbcli to user&#39;s PATH.</p><p><em><strong>To be clear, nbcli is not a REPL (Read Evaluate Print Loop) tool.</strong></em></p><p><a href="/nbcli">Read More About It</a></p><p><img src="/blog/img/nbcli-main.gif" alt="NoSQLBooster Command Line"> </p><h1><span id="esnext-features-optional-chaining-and-nullish-coalescing">ESNext features, optional chaining, and nullish coalescing</span></h1><p>NoSQLBooster embraces the new features of ESNext. Version 6.0 adds two new features, optional chaining and nullish coalescing, which are very handy.</p><h2><span id="optional-chaining">Optional chaining</span></h2><p>The <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining">optional chaining (?.)</a> lets us write code where we can immediately stop running some expressions if we run into a null or undefined.  You might find yourself using ?. to replace a lot of code that performs repetitive nullish checks using the &amp;&amp; operator.</p>  <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Before</span></span><br><span class="line"><span class="keyword">if</span> (foo &amp;&amp; foo.<span class="property">bar</span> &amp;&amp; foo.<span class="property">bar</span>.<span class="property">baz</span>) &#123;</span><br><span class="line">    <span class="comment">// ...</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// After-ish</span></span><br><span class="line"><span class="keyword">if</span> (foo?.<span class="property">bar</span>?.<span class="property">baz</span>) &#123;</span><br><span class="line">    <span class="comment">// ...</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="nullish-coalescing">Nullish coalescing</span></h2><p>The <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator">nullish coalescing operator (??)</a> is a logical operator that returns its right-hand side operand when its left-hand side operand is null or undefined and otherwise returns its left-hand side operand.</p><p>The ?? operator can replace uses of || when trying to use a default value. </p><pre><code class="language-js">const foo = null ?? &#39;default string&#39;;console.log(foo);// expected output: &quot;default string&quot;const baz = 0 ?? 42;console.log(baz);// expected output: 0</code></pre><h1><span id="golang-php-and-ruby-added-to-query-code-converter">Golang, PHP and Ruby added to query code converter</span></h1><p>The MongoDB query converter now supports Golang, PHP, and Ruby in addition to Node.js, Java, Python, C #, and mongo shell languages.</p><p><img src="/blog/img/php-ruby-golang.gif" alt="Golang, PHP, and Ruby added to query code"> </p><h1><span id="enhanced-data-view">Enhanced data view</span></h1><h2><span id="mark-types-with-colors">Mark types with colors</span></h2><p>Give different colors to different types, making the data easier to identify and view. If this looks a little too flashy, you can use the option &quot;Menu -&gt; Options -&gt;  Output Panel -&gt; Mark Types with Colors&quot; to turn it off.</p><p><img src="/blog/img/mark-types-with-colors.gif" alt="Mark types with colors"> </p><h2><span id="greatly-improved-table-view">Greatly improved table view</span></h2><h3><span id="table-view-in-place-edit">Table-View | In-place edit</span></h3><p>In addition to the tree open view, you can now double-click to open the edit-in-place text control to edit and submit content in the table view.</p><p><img src="/blog/img/edit-in-place-table-view.png" alt="Edit-in-place table view"> </p><h3><span id="table-view-column-chooser">Table-View | Column chooser</span></h3><p>The newly designed column chooser can easily select fields or embedded fields. You can also see that more functions have been added in the header context menu of the table. </p><p><em><strong>After selecting the fields, you can also use the right-click menu to save the query results view as a MongoDB read-only view (Include Visible Columns or Exclude Hidden Columns)</strong></em></p><p><img src="/blog/img/column-chooser-table-view.png" alt="column-chooser"> </p><h3><span id="table-view-column-moving-and-freeze-columns">Table-View | Column-moving and freeze columns</span></h3><p>To move a column, just drag the column&#39;s header to the desired position. You can also drag the column to the frozen zone to freeze some fields so that they do not scroll out of view. <em><strong>The _ id field is located in the frozen zone by default.</strong></em> </p><p><img src="/blog/img/column-moving-table-view.gif" alt="Column-moving and freeze columns"> </p><h2><span id="one-click-projection-and-one-click-sorting">One-click projection and One-click sorting</span></h2><p>In addition to one-click filtering and one-click grouping, one-click projection and one-click sorting have been added in version 6. One-click projection allows you to easily select several fields in the results view and form a new query. One-click sorting can re-sort the chosen fields in ascending and descending order. All one-click features support embedded fields.</p><p><img src="/blog/img/one-click-features.gif" alt="One-click Features"> </p><h2><span id="tooltip-improvements">Tooltip Improvements</span></h2><p>Informative tooltips are getting better now. You can press the &quot;p&quot; key to view JSON array and objects, multiple lines of text, URL pages, pictures, and geographic location information.</p><p><img src="/blog/img/press-p-view-object.png" alt="Press &quot;p&quot; to view object"> </p><h1><span id="favorites-feature">Favorites Feature</span></h1><p>The favorites feature is used to tag database objects and bookmark scripts, providing you with one-click access. Favorites can be accessed through the favorites item in the main menu.</p><ul><li>To add a database object to the favorites, select the item in the Databases object tree, click Menu-&gt;Favorites, or use the &quot;Add to Favorites&quot; right-click menu operation for the database object. </li><li>To add a query script to the favorites, please double-click to open this script from the &quot;My Queries&quot; tree, then click Menu-&gt;Favorites to bookmark query script or use the &quot;Add to Favorites&quot; right-click menu operation for the query script from the &quot;My Queries&quot; tree</li></ul><p><img src="/blog/img/add-to-favorites-dbobject.png" alt="Add database object to favorites"> </p><h1><span id="sql-query-improvements">SQL query improvements</span></h1><p>In this version, we removed the restrictions on SQL JOIN and subquery statements in the free version and added a dozen SQL snippets. For example, SQL-like, SQL-GroupBy, SQL-DateRange, SQL-Between, etc.</p><p><img src="/blog/img/v6-sql-snippets.gif" alt="SQL Snippets"> </p><h1><span id="other-notable-improvements">Other Notable Improvements</span></h1><h2><span id="add-date-time-to-export-file-path">Add date time to export file path</span></h2><p>When exporting MongoDB collection or backing up the database regularly, you may want to add the DateTime to the export file path (e.g.,&#x2F;exports&#x2F;backup_yyyy_mm_dd.csv) ). The DateTime variable (e.g., %%YYYY_MM_DD%%%) has been added to NoSQLBooster 6, so you can easily append DateTime to the export path. NoSQLBooster uses moment.js to format date and time. For more formatting,  see the <a href="https://momentjs.com/docs/#/displaying/">moment.js website</a>.  </p><p><img src="/blog/img/datetime-path.png" alt="Append Date to export path"> </p><h2><span id="export-non-cursor-objects">Export non-cursor objects</span></h2><p>NoSQLBooster V6 allows you to export non-cursor data, includes normal javascript arrays or objects. e.g: db.xxx.find().toArray() or db.xxx.findOne(). </p><h2><span id="savex2frestore-workspace-improvements">Save&#x2F;Restore Workspace Improvements</span></h2><p>In previous versions, only one connection and one tab could be restored. There is no such restriction in V6. NoSQLBooster V6 can ultimately save and restore the working space, including all connections and tabs.</p><h2><span id="new-aggregationcursorpushstage-method">New AggregationCursor.pushStage method</span></h2><p>NoSQLBooster supports mongoose-like fluent query builder API that enables you to build up a query using chaining syntax. All aggregation stage operators in the current version of MongoDB (4.2) have corresponding chainable methods. Considering that MongoDB continues to add aggregation stage operators, we have added this &quot;pushStage&quot; method in this release to be compatible with the possible future stage operators.</p><pre><code class="language-js">db.movieDetails.aggregate()    .match(&#123;type:&quot;movie&quot;&#125;)    .pushStage(&#123;$limit:5&#125;) //pushStage() method appends the given stage in the last of the pipelines//equal to db.movieDetails.aggregate()    .match(&#123;type:&quot;movie&quot;&#125;)    .limit(5)//or, the equivalent MongoDB JSON-like Query db.movieDetails.aggregate([  &#123; $match: &#123;type:&quot;movie&quot;&#125;&#125;,   &#123;$limit: 5&#125;])</code></pre><h1><span id="minor-improvements-and-bugfix">Minor improvements and bugfix</span></h1><ul><li>Upgrade MongoDB Node.js driver to 3.5</li><li>Upgrade major dependencies electron to 7.x, Chrome v78, Node v12.8, and V8 v7.8</li><li>Support Ed25519 keys for SSH tunnels authentication</li><li>Support MySQL 8 default authentication (caching_sha2_password)</li><li>In the tree&#x2F;table view, press &quot;CMD+PageDown&quot; to go to the next page and &quot;CMD+PageUp&quot; to go to the previous page</li><li>Add &quot;Tools&quot; item to the main menu which is quickly linked to a bunch of built-in tools</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-601-602">Version 6.0.1-6.0.2</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Added, an option to adjust the maximum number of sub-columns allowed by the column group in the table view, and when the subfield exceeds the threshold, it will be displayed as a normal object field. Menu Options-&gt; Output Panel -&gt; Table View: Max Column Len of the Column Group.</li><li>Improved, prompts the user to save unsaved tab contents when closing the tab. Menu Options -&gt;Warning Message -&gt; Prompt User to Save Unsaved Tab Content.</li><li>Fixed, an error in parsing MongoDB+Srv URI authSource default values.</li><li>Fixed, SQL parsing error when SQL like included the special character &quot;&#x2F;&quot;.</li><li>Fixed, a bug that caused the export dialog to be obscured and inoperable when the main window was too small.</li></ul><h2><span id="version-603">Version 6.0.3</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, When the mongo tools path contains special character &quot;space&quot;, the mongo tools(mongoimport&#x2F;mongoexport&#x2F;mongodump&#x2F;mongorestore) will not be able to locate.</li></ul><h2><span id="version-604">Version 6.0.4</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, when index details are displayed, the index keys are displayed incorrectly in alphabetical order rather than in natural order.</li><li>Fixed, SQL like, not like parsing error, needs to escape regular expression strings.</li></ul><h2><span id="version-605">Version 6.0.5</span></h2><ul><li>Improved, allow connection to MongoDB server 4.4.0.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-2/">MongoDB4.2</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL/">SQL</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Tasks/">Tasks</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Schedule/">Schedule</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Golang/">Golang</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/PHP/">PHP</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Ruby/">Ruby</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Code/">Query Code</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-60/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 5.2 Released! official support for MongoDB 4.2</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-52/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-52/</guid>
      <pubDate>Mon, 16 Sep 2019 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 5.2 today. This version includes official support for MongoDB 4.2 along with some useful improvements and bugfix. For more information on MongoDB 4.2 , see &lt;a href=&quot;https://docs.mongodb.com/manual/release-notes/4.2/&quot;&gt;Release Notes for MongoDB 4.2&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;MongoDB-4-2-support&quot;&gt;&lt;a href=&quot;#MongoDB-4-2-support&quot; class=&quot;headerlink&quot; title=&quot;MongoDB 4.2 support&quot;&gt;&lt;/a&gt;MongoDB 4.2 support&lt;/h1&gt;&lt;p&gt;NoSQLBooster for MongoDB 5.2 upgrades embedded MongoDB Shell to 4.2.0, adds support for all the new shell methods and operations of MongoDB 4.2. &lt;/p&gt;
&lt;h2 id=&quot;Merge-and-Other-New-Aggregation-Stages&quot;&gt;&lt;a href=&quot;#Merge-and-Other-New-Aggregation-Stages&quot; class=&quot;headerlink&quot; title=&quot;Merge and Other New Aggregation Stages&quot;&gt;&lt;/a&gt;Merge and Other New Aggregation Stages&lt;/h2&gt;&lt;p&gt;MongoDB 4.2 adds a few new aggregation pipeline stages, $merge, $planCacheStats, $replaceWith, $set and $unset. NoSQLBooster 5.2 adds these chain methods to AggregationCursor and provide the appropriate code snippets and mouse hover information to support code completion.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;users&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;planCacheStats&lt;/span&gt;(&amp;#123;&amp;#125;)  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;replaceWith&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;$name&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;set&lt;/span&gt;(&amp;#123;&lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;: &amp;#123;&lt;span class=&quot;attr&quot;&gt;$concat&lt;/span&gt;: [&lt;span class=&quot;string&quot;&gt;&amp;quot;$f_name&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;$l_name&amp;quot;&lt;/span&gt;]&amp;#125;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;unset&lt;/span&gt;([&lt;span class=&quot;string&quot;&gt;&amp;quot;f_name&amp;quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;quot;l_name&amp;quot;&lt;/span&gt;])&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;Equivalent to the following MongoShell script, but more concise, and easy to write,  not to mention code completion.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;users&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;([&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123; &lt;span class=&quot;attr&quot;&gt;$planCacheStats&lt;/span&gt;: &amp;#123;&amp;#125; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123; &lt;span class=&quot;attr&quot;&gt;$replaceWith&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$name&amp;quot;&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123; &lt;span class=&quot;attr&quot;&gt;$set&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$concat&lt;/span&gt;: [&lt;span class=&quot;string&quot;&gt;&amp;quot;$f_name&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;$l_name&amp;quot;&lt;/span&gt;] &amp;#125; &amp;#125; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123; &lt;span class=&quot;attr&quot;&gt;$unset&lt;/span&gt;: [&lt;span class=&quot;string&quot;&gt;&amp;quot;f_name&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;l_name&amp;quot;&lt;/span&gt;] &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;])&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;NoSQLBooster 5.2 also enhanced mouse hover for all aggregation chain methods. In addition to method and type definitions, hover is now able to display document and example for these aggregation clain methods.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 5.2 today. This version includes official support for MongoDB 4.2 along with some useful improvements and bugfix. For more information on MongoDB 4.2 , see <a href="https://docs.mongodb.com/manual/release-notes/4.2/">Release Notes for MongoDB 4.2</a>.</p><h1><span id="mongodb-42-support">MongoDB 4.2 support</span></h1><p>NoSQLBooster for MongoDB 5.2 upgrades embedded MongoDB Shell to 4.2.0, adds support for all the new shell methods and operations of MongoDB 4.2. </p><h2><span id="merge-and-other-new-aggregation-stages">Merge and Other New Aggregation Stages</span></h2><p>MongoDB 4.2 adds a few new aggregation pipeline stages, $merge, $planCacheStats, $replaceWith, $set and $unset. NoSQLBooster 5.2 adds these chain methods to AggregationCursor and provide the appropriate code snippets and mouse hover information to support code completion.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">users</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">    .<span class="title function_">planCacheStats</span>(&#123;&#125;)  </span><br><span class="line">    .<span class="title function_">replaceWith</span>(<span class="string">&quot;$name&quot;</span>)</span><br><span class="line">    .<span class="title function_">set</span>(&#123;<span class="attr">name</span>: &#123;<span class="attr">$concat</span>: [<span class="string">&quot;$f_name&quot;</span>, <span class="string">&quot;$l_name&quot;</span>]&#125;&#125;)</span><br><span class="line">    .<span class="title function_">unset</span>([<span class="string">&quot;f_name&quot;</span>,<span class="string">&quot;l_name&quot;</span>])</span><br></pre></td></tr></table></figure><p>Equivalent to the following MongoShell script, but more concise, and easy to write,  not to mention code completion.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">users</span>.<span class="title function_">aggregate</span>([</span><br><span class="line">    &#123; <span class="attr">$planCacheStats</span>: &#123;&#125; &#125;,</span><br><span class="line">    &#123; <span class="attr">$replaceWith</span>: <span class="string">&quot;$name&quot;</span> &#125;,</span><br><span class="line">    &#123; <span class="attr">$set</span>: &#123; <span class="attr">name</span>: &#123; <span class="attr">$concat</span>: [<span class="string">&quot;$f_name&quot;</span>, <span class="string">&quot;$l_name&quot;</span>] &#125; &#125; &#125;,</span><br><span class="line">    &#123; <span class="attr">$unset</span>: [<span class="string">&quot;f_name&quot;</span>, <span class="string">&quot;l_name&quot;</span>] &#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><p>NoSQLBooster 5.2 also enhanced mouse hover for all aggregation chain methods. In addition to method and type definitions, hover is now able to display document and example for these aggregation clain methods.</p><span id="more"></span><p><img src="/blog/img/mongo42-merge.gif" alt="Mouse hover for Aggregation Chain Methods"></p><ul><li>Press &quot;F1&quot; to view the online help</li><li>Press &quot;Shift+F1&quot; to copy the example section to the clipboard</li></ul><h2><span id="mongodb-42-new-expressions-as-sql-functions">MongoDB 4.2 New Expressions as SQL Functions</span></h2><p>NoSQLBooster 5.2 allows all new Mongodb4.2 aggregation expressions to be used as SQL function in SQL statements. <a href="https://docs.mongodb.com/manual/release-notes/4.2/#aggregation-trigonometry-expressions">Aggregation Trigonometry Expressions</a>, <a href="https://docs.mongodb.com/manual/release-notes/4.2/#aggregation-arithmetic-expressions">Aggregation Arithmetic Expressions</a> and <a href="https://docs.mongodb.com/manual/release-notes/4.2/#aggregation-regular-expressions-regex-operators">Aggregation Regular Expressions (regex) Operators</a>. </p><p><em><strong>Aggregation Trigonometry Expressions</strong></em></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> </span><br><span class="line">    <span class="built_in">sin</span>(&quot;value&quot;) <span class="keyword">as</span> sin,<span class="comment">--Returns the sine of a value that is measured in radians.</span></span><br><span class="line">    <span class="built_in">cos</span>(&quot;value&quot;) <span class="keyword">as</span> cos,<span class="comment">--Returns the cosine of a value that is measured in radians.</span></span><br><span class="line">    <span class="built_in">tan</span>(&quot;value&quot;) <span class="keyword">as</span> tan,<span class="comment">--Returns the tangent of a value that is measured in radians.</span></span><br><span class="line">    <span class="built_in">asin</span>(&quot;value&quot;) <span class="keyword">as</span> asin,<span class="comment">--Returns the inverse sin (arc sine) of a value in radians.</span></span><br><span class="line">    <span class="built_in">acos</span>(&quot;value&quot;) <span class="keyword">as</span> acos,<span class="comment">--Returns the inverse cosine (arc cosine) of a value in radians.</span></span><br><span class="line">    <span class="built_in">atan</span>(&quot;value&quot;) <span class="keyword">as</span> atan,<span class="comment">--Returns the inverse tangent (arc tangent) of a value in radians.</span></span><br><span class="line">    atan2(&quot;value&quot;, &quot;value2&quot;) <span class="keyword">as</span> atan2,<span class="comment">--Returns the inverse tangent (arc tangent) of y / x in radians, where y and x are the first and second values passed to the expression respectively.</span></span><br><span class="line">    asinh(&quot;value&quot;) <span class="keyword">as</span> asinh,<span class="comment">--Returns the inverse hyperbolic sine (hyperbolic arc sine) of a value in radians.</span></span><br><span class="line">    acosh(&quot;value&quot;) <span class="keyword">as</span> acosh,<span class="comment">--Returns the inverse hyperbolic cosine (hyperbolic arc cosine) of a value in radians.</span></span><br><span class="line">    atanh(&quot;value&quot;) <span class="keyword">as</span> atanh,<span class="comment">--Returns the inverse hyperbolic tangent (hyperbolic arc tangent) of a value in radians.</span></span><br><span class="line">    degreesToRadians(&quot;value&quot;) <span class="keyword">as</span> degreesToRadians,<span class="comment">--Converts a value from degrees to radians.</span></span><br><span class="line">    radiansToDegrees(&quot;value&quot;) <span class="keyword">as</span> radiansToDegrees <span class="comment">--Converts a value from radians to degrees.</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">FROM</span> testCollection</span><br></pre></td></tr></table></figure><p><em><strong>Aggregation Regular Expressions (regex) Operators</strong></em></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> </span><br><span class="line">    regexFind(input<span class="operator">=</span><span class="string">&#x27;Single LINE description.&#x27;</span>, regex<span class="operator">=</span><span class="string">&#x27;line&#x27;</span>, options<span class="operator">=</span><span class="string">&#x27;i&#x27;</span>) <span class="keyword">as</span> regexFind,</span><br><span class="line">    regexFindAll(<span class="string">&#x27;First lines\nsecond line&#x27;</span>, <span class="string">&#x27;line&#x27;</span>, <span class="string">&#x27;i&#x27;</span>) <span class="keyword">as</span> regexFindAll,</span><br><span class="line">    regexMatch(<span class="string">&#x27;Multiple\nline descriptions&#x27;</span>, <span class="string">&#x27;m.*line&#x27;</span>, <span class="string">&#x27;is&#x27;</span>) <span class="keyword">as</span> regexMatch</span><br><span class="line"></span><br><span class="line"><span class="keyword">FROM</span> testCollection</span><br></pre></td></tr></table></figure><p><em><strong>Aggregation Arithmetic Expressions</strong></em></p><p><img src="/blog/img/round-trunc-op.png" alt="Arithmetic Expressions in SQL"></p><h2><span id="wildcard-index">Wildcard Index</span></h2><p>MongoDB 4.2 introduces wildcard indexes for supporting queries against unknown or arbitrary fields. This version also adjusts UI to provide support for wildcard index.</p><p><img src="/blog/img/create-wildcard-index.png" alt="Create Wildcard Index"></p><h1><span id="other-improvements">Other Improvements</span></h1><h2><span id="importx2fexport-improvements">Import&#x2F;Export Improvements</span></h2><p>In this version, we thoroughly reviewed and refactored the code for the export function and greatly improves the execution performance of the export function. This version also adds a display of the progress of the export.</p><p>As for import and replication capabilities, we have added a new insertion policy that allows the original collection to be dropped before import.</p><p><img src="/blog/img/import-drop-collection-first.png" alt="Drop collection first policy"> </p><h2><span id="treex2ftable-view-cell-formatter-improvements">Tree&#x2F;Table View Cell Formatter Improvements</span></h2><p>Now, single-level, more straightforward object&#x2F;Array values are displayed as JSON text within the tree&#x2F;table view.  If an object&#x2F;array value has many, complex fields, the value is still formatted as &quot;{n attributes}&quot;. This friendly UI enhancement can save you a few times to press the &quot;+&quot; button.</p><p><img src="/blog/img/cell-formatter-as-json-text.png" alt="Format simple object as JSON text"> </p><h2><span id="new-fluent-query-methods">New Fluent Query Methods</span></h2><p>NoSQLBooster 5.2 adds the following new fluent query methods:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//text method performs a text search on the content of the fields indexed with a text index.</span></span><br><span class="line">db.<span class="property">articles</span>.<span class="title function_">find</span>(&#123;&#125;)</span><br><span class="line">     .<span class="title function_">text</span>(&#123;<span class="attr">$search</span>: <span class="string">&quot;coffee&quot;</span>, <span class="attr">$caseSensitive</span>: <span class="literal">true</span>&#125;); <span class="comment">//Equivalent to:  db.articles.find(&#123;$text: &#123; $search: &quot;coffee&quot;, $caseSensitive: true&#125;&#125;)</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">//jsonSchema method matches documents that satisfy the specified JSON Schema.</span></span><br><span class="line"><span class="keyword">let</span> myschema =  &#123;</span><br><span class="line">    <span class="attr">required</span>: [ <span class="string">&quot;item&quot;</span>, <span class="string">&quot;qty&quot;</span>, <span class="string">&quot;instock&quot;</span> ],</span><br><span class="line">    <span class="attr">properties</span>: &#123;</span><br><span class="line">    <span class="attr">item</span>: &#123; <span class="attr">bsonType</span>: <span class="string">&quot;string&quot;</span> &#125;,</span><br><span class="line">    <span class="attr">qty</span>: &#123; <span class="attr">bsonType</span>: <span class="string">&quot;int&quot;</span> &#125;,</span><br><span class="line">    <span class="attr">instock</span>: &#123; <span class="attr">bsonType</span>: <span class="string">&quot;bool&quot;</span> &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">db.<span class="property">items</span>.<span class="title function_">find</span>().<span class="title function_">jsonSchema</span>(myschema);          <span class="comment">//find all documents in the collection that satisfy the schema</span></span><br><span class="line">db.<span class="property">items</span>.<span class="title function_">find</span>().<span class="title function_">nor</span>(qb.<span class="title function_">jsonSchema</span>(myschema));  <span class="comment">//find all documents in the collection that do not satisfy the schema</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="visualizing-legacy-coordinate-pairs">Visualizing Legacy Coordinate Pairs</span></h2><p>In addition to visualize the <a href="https://docs.mongodb.com/manual/reference/geojson/">MongoDB GeoJSON Objects</a>, this feature now also allows you to visualize <a href="https://docs.mongodb.com/manual/geospatial-queries/#geospatial-legacy">legacy coordinate pairs</a>.</p><p><img src="/blog/img/visual-legacy-coordinate-pairs.png" alt="Visualize Legacy Coordinate Pairs"></p><h2><span id="add-quotreloadquot-button-to-the-document-viewer">Add &quot;Reload&quot; Button to the Document Viewer</span></h2><p>This new &quot;Reload&quot; button allows you to manually reload the contents of the current object in the document viewer.</p><p><img src="/blog/img/docviewer-reload-button.png" alt="Reload Button"></p><h2><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h2><ul><li>Fixed, kill operation in monitoring is not allowed when op has no &quot;host&quot; field. <a href="https://mongobooster.useresponse.com/topic/kill-operation-in-monitoring-not-allowed">ref#</a></li><li>Fixed, export to JSON, BSON, CSV with large result set won&#39;t work. <a href="https://mongobooster.useresponse.com/topic/export-to-json-bson-csv-with-large-result-set-wont-work">ref#</a></li><li>Fixed, Kerberos authentication connections where hostname is not the canonical name. <a href="https://mongobooster.useresponse.com/topic/application-having-issues-connecting-using-kerberos-authentication">ref#</a></li><li>Fixed, return the result in object directly when the aggregate option &quot;explain&quot; is true. <a href="https://mongobooster.useresponse.com/topic/error-in-script-not-seen-when-run-in-shell">ref#</a></li><li>Fixed, SRV connections with special characters in the password.</li></ul><h2><span id="version-523">Version 5.2.3</span></h2><p>Release Date: 2019-09-28</p><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, Export to JSON, BSON, CSV fails with Mlab MongoDB hosting. <a href="https://mongobooster.useresponse.com/topic/export-to-json-bson-csv-fails">ref#</a></li></ul><h2><span id="version-524">Version 5.2.4</span></h2><p>Release Date: 2019-10-11</p><h3><span id="add-quotnew-uuidquot-button-to-uuidx2fluuid-value-editor">Add &quot;New UUID&quot; button to UUID&#x2F;LUUID value editor</span></h3><p>Clicking the &quot;New UUID&quot; button to create new unique UUID value.</p><p><img src="/blog/img/editor-new-uuid.png" alt="New UUID Button"></p><h3><span id="add-quoturi-formatsquot-button-to-quotimport-external-databasequot-dialog">Add &quot;URI Formats&quot; button to &quot;Import External Database&quot; dialog</span></h3><p>Clicking the &quot;URI Formats&quot; button to go to the detailed help page for the Connection String URI formats.</p><p><img src="/blog/img/import-external-uri-formats-buttons.png" alt="URI Formats Button"></p><h3><span id="bugfix">Bugfix</span></h3><ul><li>Improved,  Notarize macOS NoSQLBooster Apps to be accepted by Gatekeeper after MacOS Mojave 10.14.5 update.</li></ul><h2><span id="version-525">Version 5.2.5</span></h2><p>Release Date: 2019-11-04</p><h3><span id="bugfix">Bugfix</span></h3><ul><li>Improved, the database read-only views are also rebuilt when the database is copied. </li><li>Improved, allow copy&#x2F;paste of database read-only views between databases.</li><li>Improved, update the version of the embedded mongo shell to 4.2.1.</li><li>Fixed, restore ssh connections correctly when the machine recovers from standby and hibernation.</li><li>Fixed, an error updating scripts generated by multi-selection array elements.</li><li>Fixed, an error switching and saving result view mode.</li></ul><h2><span id="version-526">Version 5.2.6</span></h2><p>Release Date: 2019-11-14</p><h3><span id="enhanced-binary-editor-adds-quotutf8quot-and-quotasciiquot-encodings">Enhanced binary editor, adds &quot;utf8&quot; and &quot;ascii&quot; encodings</span></h3><p><img src="/blog/img/binary-editor-2019.png" alt="Binary Editor"></p><ul><li>Improved, When the size of the binary content is less than 512k, the complete content is displayed in the editor. <a href="https://mongobooster.useresponse.com/topic/enable-long-binary-value-to-copy-and-view">ref#</a></li></ul><h2><span id="version-527">Version 5.2.7</span></h2><p>Release Date: 2019-11-19</p><ul><li>Fixed, scroll consistency issue on refreshing JSON&#x2F;Table view. <a href="https://mongobooster.useresponse.com/topic/scroll-consistency-on-refresh">ref#</a></li><li>Fixed, IPV6 connection does not work.</li></ul><h2><span id="version-528">Version 5.2.8</span></h2><p>Release Date: 2019-12-18</p><ul><li>Fixed, Exported CSV does not have headers. <a href="https://mongobooster.useresponse.com/topic/exported-csv-does-not-have-headers">ref#</a></li></ul><h2><span id="version-529">Version 5.2.9</span></h2><p>Release Date: 2020-1-13</p><ul><li>Fixed, replica set causes MongoNetworkError due to not connecting with fully qualified domain name. <a href="https://mongobooster.useresponse.com/topic/not-able-to-connect-mongo-database">ref#</a></li><li>Fixed, $merge results in duplicates. <a href="https://mongobooster.useresponse.com/topic/merge-results-in-duplicates">ref#</a></li><li>Fixed, cannot double-click to open and view json objects when a document has a field named id.</li></ul><h2><span id="version-5210">Version 5.2.10</span></h2><p>Release Date: 2020-3-13</p><ul><li>Fixed, kill operation not working in Cluster Sharding. <a href="https://mongobooster.useresponse.com/topic/db-killop-not-working-in-cluster-sharding">ref#</a></li><li>Fixed, editing a complex document extremely slow (context menu -&gt; Edit Document operation). <a href="https://mongobooster.useresponse.com/topic/editing-a-complex-document-extremly-slow-30-secs">ref#</a></li><li>Fixed, spaces are not escaped in passwords when using mongoexport. <a href="https://mongobooster.useresponse.com/topic/spaces-are-not-escaped-in-passwords-when-using-mongoexport">ref#</a></li></ul><h2><span id="version-5211">Version 5.2.11</span></h2><p>Release Date: 2020-5-3</p><ul><li>Fixed, SQL groups two different queries in brackets an AND operator issue. <a href="https://mongobooster.useresponse.com/topic/sql-does-not-produce-what-i-want">ref#</a></li><li>Fixed, Double value not show well in after query (fractionDigits). <a href="https://mongobooster.useresponse.com/topic/double-value-not-show-well-in-after-query">ref#</a></li><li>Fixed, mongo export failing to network share folders. <a href="https://mongobooster.useresponse.com/topic/mongo-export-failing-to-fileshare-in-version-5-2-10">ref#</a></li><li>Fixed, db.getReplicationInfo() timeDiff and timeDiffHours is incorrect. <a href="https://mongobooster.useresponse.com/topic/db-getreplicationinfo-timediff-and-timediffhours-is-incorrect">ref#</a></li><li>Fixed, SQL Like to match across multiple lines bug.</li><li>Fixed, a projection bug with Node.js 3.x driver Code Generator.</li></ul><h2><span id="version-5212">Version 5.2.12</span></h2><p>Release Date: 2020-5-17</p><ul><li>Fixed, unable to locate mongo utilities issue. <a href="https://mongobooster.useresponse.com/topic/unable-to-locate-mongo-utilities">ref#</a></li><li>Fixed, exported fields should not be sorted alphabetically. <a href="https://mongobooster.useresponse.com/topic/exporting-sorts-the-field-names-in-json-file">ref#</a></li><li>Fixed, &quot;location is undefined&quot; error when SQL parse &quot;select b, count(*) from a group by b limit 5&quot;</li><li>Fixed, pressing F8 cannot pop up the favorite code snippet drop-down menu after the script is re-executed</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Aggregation/">Aggregation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Import-Export/">Import/Export</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Fluent-API/">Fluent API</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-2/">MongoDB4.2</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Indexes/">Indexes</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-52/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing NoSQLBooster 5.1!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-51/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-51/</guid>
      <pubDate>Wed, 23 Jan 2019 02:00:01 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 5.1 today. This version includes visualizing GeoJSON Objects, mouse hover improvement for MongoDB operators along with some useful minor improvements and bugfix.&lt;/p&gt;
&lt;p&gt;Let’s dive in and get an overview of what’s coming in NoSQLBooster 5.1!&lt;/p&gt;
&lt;h1 id=&quot;Visualizing-GeoJSON-Objects&quot;&gt;&lt;a href=&quot;#Visualizing-GeoJSON-Objects&quot; class=&quot;headerlink&quot; title=&quot;Visualizing GeoJSON Objects&quot;&gt;&lt;/a&gt;Visualizing GeoJSON Objects&lt;/h1&gt;&lt;p&gt;The most significant enhancement of version 5.1 is to allow users to visualize the &lt;a href=&quot;https://docs.mongodb.com/manual/reference/geojson/&quot;&gt;MongoDB GeoJSON Objects&lt;/a&gt; quickly. The GeoJSON is a format for encoding geographical data structures, using the JavaScript Object Notation (JSON).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/visualize-geo.gif&quot; alt=&quot;Visualize GeoJSON&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Mouse-Hover-Improvement&quot;&gt;&lt;a href=&quot;#Mouse-Hover-Improvement&quot; class=&quot;headerlink&quot; title=&quot;Mouse Hover Improvement&quot;&gt;&lt;/a&gt;Mouse Hover Improvement&lt;/h1&gt;&lt;p&gt;NoSQLBooster 5.1 greatly enhanced mouse hover in the code editor. In addition to method and type definitions, hover is now able to display document and example for MongoDB operators.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/mouse-hover-operator.png&quot; alt=&quot;Mouse hover for MongoDB operators&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &amp;quot;F1&amp;quot; to view online help&lt;/li&gt;
&lt;li&gt;Press &amp;quot;Shift+F1&amp;quot; to copy the example section to the clipboard&lt;/li&gt;
&lt;/ul&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 5.1 today. This version includes visualizing GeoJSON Objects, mouse hover improvement for MongoDB operators along with some useful minor improvements and bugfix.</p><p>Let’s dive in and get an overview of what’s coming in NoSQLBooster 5.1!</p><h1><span id="visualizing-geojson-objects">Visualizing GeoJSON Objects</span></h1><p>The most significant enhancement of version 5.1 is to allow users to visualize the <a href="https://docs.mongodb.com/manual/reference/geojson/">MongoDB GeoJSON Objects</a> quickly. The GeoJSON is a format for encoding geographical data structures, using the JavaScript Object Notation (JSON).</p><p><img src="/blog/img/visualize-geo.gif" alt="Visualize GeoJSON"></p><h1><span id="mouse-hover-improvement">Mouse Hover Improvement</span></h1><p>NoSQLBooster 5.1 greatly enhanced mouse hover in the code editor. In addition to method and type definitions, hover is now able to display document and example for MongoDB operators.</p><p><img src="/blog/img/mouse-hover-operator.png" alt="Mouse hover for MongoDB operators"></p><ul><li>Press &quot;F1&quot; to view online help</li><li>Press &quot;Shift+F1&quot; to copy the example section to the clipboard</li></ul><span id="more"></span><h2><span id="use-keyboard-shortcuts-to-switch-views">Use Keyboard Shortcuts to Switch Views</span></h2><p>In version 5.1, you can use keyboard shortcuts to quickly switch between the editor, the results view, the database object explorer, and my queries panel.</p><ul><li>Press &quot;Esc&quot; to bring the focus back to the editor</li><li>Press &quot;Shift+Esc&quot; to bring the focus back to the result view</li><li>Press &quot;Command+Shift+E&quot; to bring the focus to the object explorer (new in 5.1)</li><li>Press &quot;Command+Shift+M&quot; to bring the focus to my queries panel (new in 5.1)</li></ul><h2><span id="database-rename-operation">Database Rename Operation</span></h2><p>MongoDB doesn&#39;t have a built-in way to rename a database, unlike renaming collection, renaming a database is cumbersome. NoSQLBooster 5.1 adds a handy &quot;rename database&quot; operation. This simple UI operation makes renaming the database less painful.</p><p><em><strong>Note that this rename database operation requires admin DB read and write permissions and this operation migrates only collections, indexes, and users, and other database objects need to be handled manually. Depending on the size of the collection, this may take longer to complete. Other operations which require exclusive access to the affected databases will be blocked until the rename completes.</strong></em></p><p><img src="/blog/img/rename-database-ui.png" alt="Rename Database"></p><h2><span id="quotrename-fieldquot-improvement">&quot;Rename Field&quot; Improvement</span></h2><p>In addition to renaming the field name of the select document, the newly added option allows you to rename the field names of all documents in this collection.</p><p><img src="/blog/img/rename-field-ui.png" alt="Rename Field"></p><h1><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h1><ul><li>New, added update$addToSet$each and update$push$each code snippets.</li><li>Fixed, bring back shortcut &quot;F5&quot; to execute current statement. <a href="https://mongobooster.useresponse.com/topic/bring-back-f5-and-f6-shortcut-on-nosqlbooster-5-0">#ref</a></li><li>Fixed, Keyboard friendly my queries and samples tree views <a href="https://mongobooster.useresponse.com/topic/keyboard-friendly-tree-views">#ref</a></li><li>Fixed, incorrect sort when viewing the oplog.rs collection <a href="https://mongobooster.useresponse.com/topic/incorrect-sort-when-viewing-the-oplog-collection">#ref</a></li><li>Fixed, a regressive &quot;collection name code-completion&quot; bug </li><li>Fixed, only JSON view is available bug <a href="https://mongobooster.useresponse.com/topic/only-json-view-is-available">#ref</a> </li><li>Fixed, incorrect array JSON format issue <a href="https://mongobooster.useresponse.com/topic/improper-json-indentation-in-output-panel">#ref</a></li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-512-514">Version 5.1.2-5.1.4</span></h2><p>In this patch release, we fixed some user feedback errors and added the ability to preview images in binary fields.</p><h3><span id="quotremove-fieldsquot-improvement">&quot;Remove Fields&quot; Improvement</span></h3><p>In addition to remove the select fields of the select document, the newly added option allows you to remove the selected fields of all documents in this collection.</p><p><img src="/blog/img/remove-field-ui.png" alt="Remove Fields"></p><h3><span id="bugfix">Bugfix</span></h3><ul><li>Added, do not show hidden files and directories (e.g. .git) in my queries tree view.</li><li>Added, AggregationCursor.projection method which adds a $project stage to the aggregation pipeline. Alias: AggregationCursor.project,  AggregationCursor.select</li><li>Fixed, an incorrect sorting parameters bug in code generator.</li><li>Fixed, an undefined behavior bug by calling &quot;drop user&quot; action.</li><li>Fixed, unnecessary conversion of localhost to 127.0.0.1 bug. <a href="https://mongobooster.useresponse.com/topic/use-localhost-instead-of-127-0-0-1">ref#</a></li><li>Fixed, left arrow does not jump to parents in the tree views. <a href="https://mongobooster.useresponse.com/topic/keyboard-friendly-tree-views">ref#</a></li></ul><h2><span id="version-515">Version 5.1.5</span></h2><h3><span id="ssl-option-quotallow-invalid-hostnamesquot">SSL option &quot;allow invalid hostnames&quot;</span></h3><p>Added an &quot;Allow invalid hostnames&quot; SSL option to disable the validation of the hostname in the TLS&#x2F;SSL certificates. </p><p><img src="/blog/img/ssl_allow_invalid_hosts.png" alt="Allow invalid hostnames"></p><h3><span id="bugfix">Bugfix</span></h3><ul><li>Added, &quot;Cancel&quot; action in dialog box for connection open confirmation.</li><li>Fixed, background SSH tunnel processes remains after shutting down NoSQLBooster.</li><li>Fixed, a bug in renaming field names in all documents.</li><li>Improved, update &quot;tunnel-ssh&quot; package to the latest version.</li><li>Improved, update &quot;lodash&quot; and &quot;moment&quot; package to the latest version.</li></ul><h2><span id="version-516-517">Version 5.1.6-5.1.7</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, an crash error when exporting a large query result set.</li><li>Fixed, an error saving last switch mode When the script fails.</li></ul><h2><span id="version-518">Version 5.1.8</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, code-complete Interface type definition issue (Promise, Array ...)</li><li>Fixed, writing out from aggregates in a loop does not work. <a href="https://mongobooster.useresponse.com/topic/writing-out-from-aggregates-in-a-loop-does-not-work">ref#</a></li><li>Fixed, problem with sort in default code template when the option &quot;Show Database&#x2F;Collection Stats Tooltip&quot; is enabled. <a href="https://mongobooster.useresponse.com/topic/problem-with-sort-in-default-code-template">ref#</a></li></ul><h2><span id="version-519">Version 5.1.9</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, export CSV with new Date() <a href="https://mongobooster.useresponse.com/topic/export-csv-with-new-date">ref#</a></li><li>Fixed, Object.bsonsize() returns invalid value (&gt; 16MB). <a href="https://mongobooster.useresponse.com/topic/object-bsonsize-returns-invalid-value-16mb">ref#</a></li><li>Improved, the interface of the connection editor, added &quot;isSrvRecord&quot; check-box, added &quot;edit member&quot; action in Replica Set Members list, added more Mongo_Uri_Options, authMechanismProperties, appName...</li></ul><h2><span id="version-5110">Version 5.1.10</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, Error: unknown type of write result, cannot check ok after every update, delete or insert operation.</li></ul><h2><span id="version-5111">Version 5.1.11</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, an crash error when importing a large JSON file.</li><li>Fixed, Copy -&gt; Text&#x2F;JSON - Paste only contains a portion of results. <a href="http://feedback.mongobooster.com/topic/copy-textjson-paste-only-contains-a-portion-of-results">ref#</a></li><li>Fixed, an error when updating indexes when partialFilterExpression has the $exists condition. <a href="http://feedback.mongobooster.com/topic/an-error-when-updating-indexes">ref#</a></li><li>Improved, when you switch connections within the editor, update its tab title, color and read-only status synchronously.</li></ul><h2><span id="version-5112">Version 5.1.12</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, serious regression error, &quot;copy database&quot; and &quot;copy collection&quot; does not work.</li></ul><h2><span id="version-5113">Version 5.1.13</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Improved, provided a work-around solution for Replica Set connection via SSH tunnel. <a href="https://mongobooster.useresponse.com/topic/ssh-tunnel-does-not-appear-to-be-using-tunnel-for-all-connections">ref#</a></li><li>Fixed, Error on open GridFS File with string ID. <a href="https://mongobooster.useresponse.com/topic/error-on-open-gridfs-file-with-string-id">ref#</a></li><li>Fixed, Moment.js typing definition issues.</li></ul><h2><span id="version-5114">Version 5.1.14</span></h2><p>Support for connecting to mongodb 4.2 server</p>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/GEO/">GEO</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-51/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 5.0 Is Now Available!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-50/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-50/</guid>
      <pubDate>Thu, 15 Nov 2018 02:00:01 GMT</pubDate>
      
      <description>&lt;p&gt;We’re happy to mark another significant milestone for the NoSQLBooster for MongoDB with the final release of the 5.0. It brings a number of new features to increase MongoDB&amp;#39;ers productivity, comprehensive server monitoring and diagnostics tools, visual explain plan, MongoDB log parser, enhanced SQL Query to support SQL JOIN and uncorrelated sub-queries, more friendly display of object and array values,  One-click Group-By, better code snippets, mark changed lines and NoSQLBooster-enabled live tutorials... &lt;/p&gt;
&lt;p&gt;if you want to try NoSQLBooster 5.0 out now, you can get it from the following link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nosqlbooster.com/downloads&quot;&gt;NoSQLBooster 5.0 Download Link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product will automatically enter the 30-day trial mode after successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free edition is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 5.0.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/v5-main-interface-ga.png&quot; alt=&quot;Main interface&quot;&gt; &lt;/p&gt;
&lt;p&gt;Let’s dive in and get an overview of what’s coming in NoSQLBooster 5.0!&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We’re happy to mark another significant milestone for the NoSQLBooster for MongoDB with the final release of the 5.0. It brings a number of new features to increase MongoDB&#39;ers productivity, comprehensive server monitoring and diagnostics tools, visual explain plan, MongoDB log parser, enhanced SQL Query to support SQL JOIN and uncorrelated sub-queries, more friendly display of object and array values,  One-click Group-By, better code snippets, mark changed lines and NoSQLBooster-enabled live tutorials... </p><p>if you want to try NoSQLBooster 5.0 out now, you can get it from the following link.</p><p><strong><a href="https://nosqlbooster.com/downloads">NoSQLBooster 5.0 Download Link</a></strong></p><p>The product will automatically enter the 30-day trial mode after successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free edition is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>The following figure shows the main interface of version 5.0.</p><p><img src="/blog/img/v5-main-interface-ga.png" alt="Main interface"> </p><p>Let’s dive in and get an overview of what’s coming in NoSQLBooster 5.0!</p><p>Although we are showing screenshots of NoSQLBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><span id="more"></span><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#my-queriessamples-pane">&quot;My Queries&#x2F;Samples&quot; pane</a></li><li><a href="#visual-explain-plan">Visual explain plan</a></li><li><a href="#sql-joins-and-uncorrelated-sub-queries">SQL joins and uncorrelated sub-queries</a></li><li><a href="#monitoring-tools">Monitoring tools</a><ul><li><a href="#in-progress-operations-viewer">In-progress operations viewer</a></li><li><a href="#mongodb-log-parser">MongoDB log parser</a></li><li><a href="#database-profiler">Database profiler</a></li><li><a href="#troubleshoot-replica-sets">Troubleshoot replica sets</a></li></ul></li><li><a href="#enhanced-data-viewer">Enhanced data viewer</a><ul><li><a href="#tooltip-for-array-object-and-objectid-values">Tooltip for array, object and ObjectId values</a></li><li><a href="#one-click-group-by">One-click Group-By</a></li><li><a href="#table-view-show-object-value-as-a-column-group">Table view, show object value as a column group</a></li><li><a href="#other-notable-improvements-for-the-data-view">Other notable improvements for the data view</a></li></ul></li><li><a href="#enhanced-script-editor">Enhanced script editor</a><ul><li><a href="#better-code-snippets">Better code snippets</a></li><li><a href="#mark-changed-lines">Mark changed lines</a></li><li><a href="#switch-mongodb-connection-and-current-database-within-the-editor">Switch MongoDB connection and current database within the editor</a></li><li><a href="#list-opened-tabs">List opened tabs</a></li></ul></li><li><a href="#enhanced-connection-treeobject-explorer">Enhanced connection tree&#x2F;object explorer</a><ul><li><a href="#open-mongodb-shell-here">Open MongoDB shell here</a></li><li><a href="#better-view-and-manage-your-indexes">Better view and manage your indexes</a></li><li><a href="#connection-node-tooltip-press-m-to-show-more-metrics">Connection node tooltip, press &quot;m&quot; to show more metrics</a></li></ul></li><li><a href="#query-code-generator-improvements">Query code generator improvements</a><ul><li><a href="#create-a-query-code-sample-project">Create a query code sample project</a></li></ul></li><li><a href="#other-notable-improvements">Other notable improvements</a><ul><li><a href="#more-run-options">More &quot;Run&quot; options</a></li><li><a href="#filterable-connection-manager">Filterable connection manager</a></li><li><a href="#new-option-modify-default-limit-size">New option, modify default limit size</a></li><li><a href="#schema-analyzer-support-json-schema">Schema analyzer, support JSON schema</a></li></ul></li><li><a href="#minor-improvements-and-bugfix">Minor improvements and bugfix</a></li><li><a href="#patch-releases">Patch Releases</a><ul><li><a href="#version-501">Version 5.0.1</a><ul><li><a href="#preview-images-in-binary-fields">Preview images in binary fields</a></li><li><a href="#bugfix">Bugfix</a></li></ul></li><li><a href="#version-502-and-503">Version 5.0.2 and 5.0.3</a><ul><li><a href="#bugfix-1">Bugfix</a></li></ul></li></ul></li></ul><!-- tocstop --><h1><span id="quotmy-queriesx2fsamplesquot-pane">&quot;My Queries&#x2F;Samples&quot; pane</span></h1><p>In version 5.0, the most significant change in the UI interface was the addition of &quot;My Queries &#x2F; Samples&quot; Pane. The &quot;My Queries &#x2F; Samples&quot; pane has two tabs, &quot;My Queries&quot; and &quot;Samples.&quot;</p><p>The &quot;My Queries&quot; tab is used to open user-saved query scripts quickly.  By default, the user-saved query script is saved as a &quot;connection -&gt; database -&gt; query name&quot; directory structure. Double-click to open a saved query script will automatically connect to the appropriate database server and switches to the appropriate database. </p><p>The &quot;Sample&quot; tab includes several NoSQLBooster-Enabled tutorials. All samples are executable in NoSQLBooster already, with detailed descriptions. You can try these queries and change them to learn better. </p><p><img src="/blog/img/samples-tab.png" alt="Samples tab"> </p><h1><span id="visual-explain-plan">Visual explain plan</span></h1><p>NoSQLBooster&#39;s Visual Explain transforms explain output into a hierarchical view of the query plan, which is significantly easier to read and understand, allowing for query tuning to enhance query and resolve performance issues. </p><p><img src="/blog/img/explain-visual-tree.png" alt="Visual explain"> </p><h1><span id="sql-joins-and-uncorrelated-sub-queries">SQL joins and uncorrelated sub-queries</span></h1><p>MongoDB 3.2 introduced the new <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/">$lookup operator</a>. The $lookup operator added to the aggregation pipeline is essentially identical to a left outer SQL join. MongoDB 3.6 further enhances the capabilities of the $lookup operator to perform uncorrelated sub-queries between two collections as well as allow other join conditions besides a single equality match. NoSQLBooster 5.0 implements SQL Equi join and unrelated queries with the power of the $lookup operator.</p><p>NoSQLBooster supports INNER JOIN and LEFT JOIN, OUTER JOIN is not supported.</p><ul><li>(INNER) JOIN: Returns records that have matching values in both tables</li><li>LEFT JOIN: Return all records from the left table, and the matched records from the right table</li></ul><p>It should be mentioned that there is a <strong>tutorial on NoSQLBooster SQL Query for MongoDB</strong> in the lower left &quot;Samples&quot; pane.  With this tutorial, you can learn and understand how to use NoSQLBooster SQL Query for MongoDB. Better yet, all SQL Functions provide the appropriate code snippets and mouse hover information and support code completion.</p><p><img src="/blog/img/sql-equi-join.png" alt="SQL Equi join"> </p><h1><span id="monitoring-tools">Monitoring tools</span></h1><p>In version 5.0, we add several server monitoring and diagnostics tools and consolidate all monitoring related work into a drop-down menu called &quot;Monitoring.&quot;</p><p><img src="/blog/img/monitoring-drop-menu.png" alt="Monitoring drop menu"> </p><h2><span id="in-progress-operations-viewer">In-progress operations viewer</span></h2><p>When your MongoDB is unresponsive, you need to determine the cause quickly. Although there can be many causes for server unresponsiveness, we sometimes find that exceptionally long running operations and&#x2F;or blocking operations are the culprits. The new &quot;In-progress operations&quot; tool integrates the currentOp() and killOp() commands and allows you to find and kill long running MongoDB operations quickly.</p><p>The db.currentOp() command reports in-progress operations for the mongod instance.</p><p><img src="/blog/img/in-progress-operations.png" alt="In-progress operations viewer"> </p><h2><span id="mongodb-log-parser">MongoDB log parser</span></h2><p>This feature includes two MongoDB log viewers, one for parsing and displaying the most recent 1024  <a href="https://docs.mongodb.com/manual/reference/command/getLog/">logged MongoD events</a>, and the other for parsing and displaying external MongoDB log files. This tool will parse the log quickly and output general information about its contents, including timestamp, severity, component, context and command specific messages. It also allows you to <strong>save parsed log entries to MongoDB&#39;s collection</strong> so that you can further analyze and query the logs using MongoDB&#39;s find method.</p><p><img src="/blog/img/mongodb-log-viewer.png" alt="MongoDB log parser"> </p><h2><span id="database-profiler">Database profiler</span></h2><p>This simple feature will display the <a href="https://docs.mongodb.com/manual/tutorial/manage-the-database-profiler/">database profiler</a> logs information about database operations in &quot;system.profile&quot; collection. The profiler is off by default. You can enable the profiler on a per-database or per-instance basis at one of several profiling levels. By default, the slow operation threshold is 100 milliseconds. </p><p>Click here to learn <a href="https://docs.mongodb.com/manual/tutorial/manage-the-database-profiler/">how to manage the database profiler?</a> (Official documentation for MongoDB)</p><h2><span id="troubleshoot-replica-sets">Troubleshoot replica sets</span></h2><p>This feature is a partial implementation of each of the functions mentioned in <a href="https://docs.mongodb.com/manual/tutorial/troubleshoot-replica-sets/">this official document for MongoDB - Troubleshoot Replica Sets</a>.</p><p>It includes the following small features.</p><ul><li>Check Replica Set Status</li><li>Check the Replication Lag</li><li>Check the Size of the Oplog</li><li>Check and fix Oplog Entry Timestamp Error</li></ul><h1><span id="enhanced-data-viewer">Enhanced data viewer</span></h1><h2><span id="tooltip-for-array-object-and-objectid-values">Tooltip for array, object and ObjectId values</span></h2><p>How to display the array, object values in the data view is often a bit of a hassle. In V5, we add a more friendly tooltip for the array, object, and ObjectId values. </p><p><img src="/blog/img/tooltip-object-array.gif" alt="Tooltip for array and object values"> </p><h2><span id="one-click-group-by">One-click Group-By</span></h2><p>This handy feature allows grouping of the selected field in query results to calculate counts, totals, minimums, maximums, and averages with a single click.</p><p>The following example lists the total number and average weight of unicorns by gender.</p><p><img src="/blog/img/one-click-group-by.gif" alt="One-click Group-By"> </p><h2><span id="table-view-show-object-value-as-a-column-group">Table view, show object value as a column group</span></h2><p>Now, single-level, more straightforward object values are displayed as column groups within the table view. If an object value has many, complex fields, the object value is formatted as JSON text.</p><p><img src="/blog/img/table-view-column-group.png" alt="Object value as a column group"> </p><h2><span id="other-notable-improvements-for-the-data-view">Other notable improvements for the data view</span></h2><ul><li>More copy options, Copy value&#x2F;key-value pair&#x2F;document as plain JSON text or Mongo Shell JSON value.</li><li>One-click save query results as MongoDB read-only view, Pop-up right-click menu, Click &quot;Save This Query as MongoDB Read-only View&quot;</li><li>Table view, highlight selected field when view document, When you open the &quot;View Document&quot; dialog within table view, automatically scrolls and highlights to the selected field.</li><li>JSON view, allow view, add, edit and remove document within JSON View.</li><li>JSON view, add a new simple format for JSON view, it will displays all number values as plain text, no more NumberInt(123),  NumberLong(&quot;123456789&quot;), NumberDecimal(&quot;1234567.89&quot;)</li></ul><h1><span id="enhanced-script-editor">Enhanced script editor</span></h1><h2><span id="better-code-snippets">Better code snippets</span></h2><p>We offer tons of built-in snippets to help you writing MongoDB shell script effectively. In V5, We revised a large number of code snippets, better grouping, easy to find, easy to input. Typically, you only need to enter a few initial letters of the action, and you&#39;ll get the sample template code you need.</p><ul><li>Find, findByObjectId, findTextSearch, findWhereEq, Insert, Update, Delete ...</li><li>SQL, SQL-JOIN, SQL-SUM, SQL-IN-SELECT ...</li><li>Handy date range snippets, e.g. TodayDateRange, LastNWeeksDateRange, LastNMonthsDateRange ...</li><li>Simplify complex MongoDB shell command, e.g. aggregate, createUser, rs.initiate, rs.conf ...</li><li>If you come from a SQL background, these handy SQL to MongoDB conversion snippets may give you some help, </li><li>Create your snippets by hitting F8</li></ul><p><img src="/blog/img/v5-code-snippets.gif" alt="Code snippets"> </p><h2><span id="mark-changed-lines">Mark changed lines</span></h2><p>The feature lets you see which lines have been changed since the last save operation, the new&#x2F;modified lines are marked at the left margin. </p><p><img src="/blog/img/mark-changed-lines.gif" alt="Mark changed lines"> </p><h2><span id="switch-mongodb-connection-and-current-database-within-the-editor">Switch MongoDB connection and current database within the editor</span></h2><p>Now, you can open and switch MongoDB connection within the editor, and you also can change the current database within the editor. It even allows you to view and run scripts without a database Connection. In this case, NoSQLBooster looks much like an ES2017 playground which integrated Lodash, Shelljs, Moment.js and Node.js runtime.</p><p><img src="/blog/img/switch-connection-db-within-editor.gif" alt="Switch connection and database"> </p><h2><span id="list-opened-tabs">List opened tabs</span></h2><p>&quot;List Opened Tabs&quot; feature let you list and switch to another tab. It&#39;s handy if you opened a lot of tabs in a window.</p><p><img src="/blog/img/list-open-tabs.png" alt="List opened tabs"> </p><h1><span id="enhanced-connection-treex2fobject-explorer">Enhanced connection tree&#x2F;object explorer</span></h1><h2><span id="open-mongodb-shell-here">Open MongoDB shell here</span></h2><p>This feature allows you to open a new MongoDB Shell terminal via the context menu of the connection node. This is especially handy for SSH tunnel connections.</p><p><img src="/blog/img/open-mongoshell-here.gif" alt="Open MongoDB shell here"> </p><h2><span id="better-view-and-manage-your-indexes">Better view and manage your indexes</span></h2><p>The redesigned index management interface allows you to view index types, sizes, index usage, and other special properties more efficiently. Add and remove indexes at the click of a button.</p><p>  <img src="/blog/img/indexes-manager.png" alt="Indexes viewer"> </p><h2><span id="connection-node-tooltip-press-quotmquot-to-show-more-metrics">Connection node tooltip, press &quot;m&quot; to show more metrics</span></h2><p> Now, the tooltip for connection node can show more server status information, network in and out, memory, connections...,  press &quot;m&quot; to show more server metrics.</p><p><img src="/blog/img/connection-node-tooltip.gif" alt="Connection node tooltip"> </p><h1><span id="query-code-generator-improvements">Query code generator improvements</span></h1><h2><span id="create-a-query-code-sample-project">Create a query code sample project</span></h2><p>  Query Code Generator now not only generates query code for the target language (Node.js, Java, C#, Python) but also create sample projects for quick execution and testing of generated query code.</p><p>  The following video demonstrates how to create and run a java gradle project for MongoDB Query.</p><p>  <img src="/blog/img/query-code-create-sample-project.gif" alt="Query code create sample project"></p><h1><span id="other-notable-improvements">Other notable improvements</span></h1><h2><span id="more-quotrunquot-options">More &quot;Run&quot; options</span></h2><p>  Refactoring the &quot;Run&quot; button to a drop-down menu, adding more &quot;Run&quot; options.</p><p>  <img src="/blog/img/run-button-drop-menu.png" alt="&quot;Run&quot; drop menu"></p><h2><span id="filterable-connection-manager">Filterable connection manager</span></h2><p>  You are now able to filter connections by name, server, and security columns.</p><p>  <img src="/blog/img/filterable-connection-manager.gif" alt="Connection filter"></p><h2><span id="new-option-modify-default-limit-size">New option, modify default limit size</span></h2><p>   The &quot;%%limit%%&quot; variable can be used for code templates e.g. db.collection.find().limit(%%limit%%).<br>   Use  ** Menu -&gt; Options -&gt; Modify Default Code Template -&gt; Modify Default Limit Size...** to adjust the value, default size of this variable is 1000.<br>   BTW, you can use ** Menu -&gt; Options -&gt; Modify Default Code Template -&gt; Code Template for Opening Collection...** to customize the &quot;find&quot; code template which are used for opening collection.</p><p>   <img src="/blog/img/modify-find-code-template-v5.png" alt="modify &quot;find&quot; template"></p><h2><span id="schema-analyzer-support-json-schema">Schema analyzer, support JSON schema</span></h2><p>   Starting in version 3.6, MongoDB supports JSON Schema validation. Now, you can use NoSQLBooster schema analyzer to view specifies validation rules.     </p><p>   <img src="/blog/img/schema-json-validator.png" alt="View JSON validator"></p><h1><span id="minor-improvements-and-bugfix">Minor improvements and bugfix</span></h1><ul><li>New option, Use ** Menu -&gt; Options -&gt; Verbose Shell ** to activate&#x2F;deactivate the <a href="https://docs.mongodb.com/manual/reference/method/setVerboseShell/">verbose shell</a>.</li><li>Reduce server-side operations by caching results more intelligently</li><li>Upgrade major dependencies electron to 3.0, Chrome v66., Node v10.2, and V8 v6.6</li><li>Upgrade HackFont to 3.0</li></ul><h1><span id="patch-releases">Patch Releases</span></h1><h2><span id="version-501">Version 5.0.1</span></h2><p>In this patch release, we fixed some user feedback errors and added the ability to preview images in binary fields.</p><h3><span id="preview-images-in-binary-fields">Preview images in binary fields</span></h3><p><img src="/blog/img/preview-image-field.png" alt="Preview Image Field"></p><h3><span id="bugfix">Bugfix</span></h3><ul><li>Added, right-click context Menu to all code editor in the dialog box.</li><li>Added, &quot;mod + enter&quot; shortcut to &quot;save&quot; button to save and exit the value editor dialog.</li><li>Fixed, display issue with NumberLong and NumberDecimal in the tree&#x2F;table view.</li><li>Fixed, an unexpectedly quit bug when opening a collection with large binary data. <a href="http://feedback.mongobooster.com/topic/nosqlbooster-quit-unexpectedly-when-open-collection-with-binary-data-images">ref#</a></li><li>Fixed, &quot;cursor.map&quot; method returns the wrong result type. <a href="http://feedback.mongobooster.com/topic/5-0-0-get-stuck-in-a-cyclic-dependency-loop">ref#</a></li><li>Fixed, &quot;Code&quot; method typing definition issue.</li></ul><h2><span id="version-502-and-503">Version 5.0.2 and 5.0.3</span></h2><h3><span id="bugfix">Bugfix</span></h3><ul><li>Fixed, DBRef is missing $ref, $id, $db attributes. <a href="https://mongobooster.useresponse.com/topic/dbref-does-not-work">ref#</a></li><li>Fixed, a bug in the &quot;cursor.forEach&quot; method. <a href="https://mongobooster.useresponse.com/topic/scripts-not-working-properly-probably-bug">ref#</a></li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-0/">MongoDB4.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Indexes/">Indexes</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL/">SQL</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-50/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing NoSQLBooster 5.0 RC!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-50-rc/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-50-rc/</guid>
      <pubDate>Mon, 15 Oct 2018 02:00:01 GMT</pubDate>
      
      <description>&lt;p&gt;NoSQLBooster 5.0 is almost out, and today we’re happy to show just how close we are with our release candidate! We’re looking to get any feedback from this RC to successfully ship NoSQLBooster 5.0 properly, so if you’d like to give it a shot now, you can get the RC from the following links.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nosqlbooster.com/s3/download/releasesv5/nosqlbooster4mongo-5.0.0-rc.4.exe&quot;&gt;NoSQLBooster 5.0 RC for Windows&lt;/a&gt; (Windows 7 and above, 64 bit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nosqlbooster.com/s3/download/releasesv5/nosqlbooster4mongo-5.0.0-rc.4.dmg&quot;&gt;NoSQLBooster 5.0 RC for MacOS&lt;/a&gt; (OS X 10.8 and above)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nosqlbooster.com/s3/download/releasesv5/nosqlbooster4mongo-5.0.0-rc.4.AppImage&quot;&gt;NoSQLBooster 5.0 RC for Linux&lt;/a&gt; (Major distros &lt;a href=&quot;http://appimage.org/&quot;&gt;AppImage&lt;/a&gt;, 64 bit)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that the license key of 4.0 is not applicable to 5.0, the product will automatically enter the 30-day trial mode after successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free edition is free for personal&amp;#x2F;commercial use but with &lt;a href=&quot;https://nosqlbooster.com/compareEditions&quot;&gt;limited functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following figure shows the main interface of version 5.0.&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>NoSQLBooster 5.0 is almost out, and today we’re happy to show just how close we are with our release candidate! We’re looking to get any feedback from this RC to successfully ship NoSQLBooster 5.0 properly, so if you’d like to give it a shot now, you can get the RC from the following links.</p><ul><li><a href="https://nosqlbooster.com/s3/download/releasesv5/nosqlbooster4mongo-5.0.0-rc.4.exe">NoSQLBooster 5.0 RC for Windows</a> (Windows 7 and above, 64 bit)</li><li><a href="https://nosqlbooster.com/s3/download/releasesv5/nosqlbooster4mongo-5.0.0-rc.4.dmg">NoSQLBooster 5.0 RC for MacOS</a> (OS X 10.8 and above)</li><li><a href="https://nosqlbooster.com/s3/download/releasesv5/nosqlbooster4mongo-5.0.0-rc.4.AppImage">NoSQLBooster 5.0 RC for Linux</a> (Major distros <a href="http://appimage.org/">AppImage</a>, 64 bit)</li></ul><p>Note that the license key of 4.0 is not applicable to 5.0, the product will automatically enter the 30-day trial mode after successful installation. At the end of the 30-day trial period, the product becomes a free edition. The free edition is free for personal&#x2F;commercial use but with <a href="https://nosqlbooster.com/compareEditions">limited functions</a>.</p><p>The following figure shows the main interface of version 5.0.</p><span id="more"></span><p><img src="/blog/img/v5-main-interface.png" alt="Main interface"> </p><p>Let’s dive in and get an overview of what’s coming in NoSQLBooster 5.0!</p><h1><span id="what39s-new">What&#39;s new?</span></h1><!-- toc --><ul><li><a href="#my-queriessamples-pane">&quot;My Queries&#x2F;Samples&quot; pane</a></li><li><a href="#visual-explain-plan">Visual explain plan</a></li><li><a href="#sql-joins-and-uncorrelated-sub-queries">SQL joins and uncorrelated sub-queries</a></li><li><a href="#monitoring-tools">Monitoring tools</a><ul><li><a href="#in-progress-operations-viewer">In-progress operations viewer</a></li><li><a href="#mongodb-log-parser">MongoDB log parser</a></li><li><a href="#database-profiler">Database profiler</a></li><li><a href="#troubleshoot-replica-sets">Troubleshoot replica sets</a></li></ul></li><li><a href="#enhanced-data-viewer">Enhanced data viewer</a><ul><li><a href="#tooltip-for-array-object-and-objectid-values">Tooltip for array, object and ObjectId values</a></li><li><a href="#one-click-group-by">One-click Group-By</a></li><li><a href="#table-view-show-object-value-as-a-column-group">Table view, show object value as a column group</a></li><li><a href="#other-notable-improvements-for-the-data-view">Other notable improvements for the data view</a></li></ul></li><li><a href="#enhanced-script-editor">Enhanced script editor</a><ul><li><a href="#better-code-snippets">Better code snippets</a></li><li><a href="#mark-changed-lines">Mark changed lines</a></li><li><a href="#switch-mongodb-connection-and-current-database-within-the-editor">Switch MongoDB connection and current database within the editor</a></li><li><a href="#list-opened-tabs">List opened tabs</a></li></ul></li><li><a href="#enhanced-connection-treeobject-explorer">Enhanced connection tree&#x2F;object explorer</a><ul><li><a href="#open-mongodb-shell-here">Open MongoDB shell here</a></li><li><a href="#better-view-and-manage-your-indexes">Better view and manage your indexes</a></li><li><a href="#connection-node-tooltip-press-m-to-show-more-metrics">Connection node tooltip, press &quot;m&quot; to show more metrics</a></li></ul></li><li><a href="#query-code-generator-improvements">Query code generator improvements</a><ul><li><a href="#create-a-query-code-sample-project">Create a query code sample project</a></li></ul></li><li><a href="#other-notable-improvements">Other notable improvements</a><ul><li><a href="#more-run-options">More &quot;Run&quot; options</a></li><li><a href="#filterable-connection-manager">Filterable connection manager</a></li><li><a href="#new-option-modify-default-limit-size">New option, modify default limit size</a></li><li><a href="#schema-analyzer-support-json-schema">Schema analyzer, support JSON schema</a></li></ul></li><li><a href="#minor-improvements-and-bugfix">Minor improvements and bugfix</a></li></ul><!-- tocstop --><h1><span id="quotmy-queriesx2fsamplesquot-pane">&quot;My Queries&#x2F;Samples&quot; pane</span></h1><p>In version 5.0, the most significant change in the UI interface was the addition of &quot;My Queries &#x2F; Samples&quot; Pane. The &quot;My Queries &#x2F; Samples&quot; pane has two tabs, &quot;My Queries&quot; and &quot;Samples.&quot;</p><p>The &quot;My Queries&quot; tab is used to open user-saved query scripts quickly.  By default, the user-saved query script is saved as a &quot;connection -&gt; database -&gt; query name&quot; directory structure. Double-click to open a saved query script will automatically connect to the appropriate database server and switches to the appropriate database. </p><p>The &quot;Sample&quot; tab includes several NoSQLBooster-Enabled tutorials. All samples are executable in NoSQLBooster already, with detailed descriptions. You can try these queries and change them to learn better. </p><p><img src="/blog/img/samples-tab.png" alt="Samples tab"> </p><h1><span id="visual-explain-plan">Visual explain plan</span></h1><p>NoSQLBooster&#39;s Visual Explain transforms explain output into a hierarchical view of the query plan, which is significantly easier to read and understand, allowing for query tuning to enhance query and resolve performance issues. </p><p><img src="/blog/img/explain-visual-tree.png" alt="Visual explain"> </p><h1><span id="sql-joins-and-uncorrelated-sub-queries">SQL joins and uncorrelated sub-queries</span></h1><p>MongoDB 3.2 introduced the new <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/">$lookup operator</a>. The $lookup operator added to the aggregation pipeline is essentially identical to a left outer SQL join. MongoDB 3.6 further enhances the capabilities of the $lookup operator to perform uncorrelated sub-queries between two collections as well as allow other join conditions besides a single equality match. NoSQLBooster 5.0 implements SQL Equi join and unrelated queries with the power of the $lookup operator.</p><p>NoSQLBooster supports INNER JOIN and LEFT JOIN, OUTER JOIN is not supported.</p><ul><li>(INNER) JOIN: Returns records that have matching values in both tables</li><li>LEFT JOIN: Return all records from the left table, and the matched records from the right table</li></ul><p>It should be mentioned that there is a <strong>tutorial on NoSQLBooster SQL Query for MongoDB</strong> in the lower left &quot;Samples&quot; pane.  With this tutorial, you can learn and understand how to use NoSQLBooster SQL Query for MongoDB. Better yet, all SQL Functions provide the appropriate code snippets and mouse hover information and support code completion.</p><p><img src="/blog/img/sql-equi-join.png" alt="SQL Equi join"> </p><h1><span id="monitoring-tools">Monitoring tools</span></h1><p>In version 5.0, we add several server monitoring and diagnostics tools and consolidate all monitoring related work into a drop-down menu called &quot;Monitoring.&quot;</p><p><img src="/blog/img/monitoring-drop-menu.png" alt="Monitoring drop menu"> </p><h2><span id="in-progress-operations-viewer">In-progress operations viewer</span></h2><p>When your MongoDB is unresponsive, you need to determine the cause quickly. Although there can be many causes for server unresponsiveness, we sometimes find that exceptionally long running operations and&#x2F;or blocking operations are the culprits. The new &quot;In-progress operations&quot; tool integrates the currentOp() and killOp() commands and allows you to find and kill long running MongoDB operations quickly.</p><p>The db.currentOp() command reports in-progress operations for the mongod instance.</p><p><img src="/blog/img/in-progress-operations.png" alt="In-progress operations viewer"> </p><h2><span id="mongodb-log-parser">MongoDB log parser</span></h2><p>This feature includes two MongoDB log viewers, one for parsing and displaying the most recent 1024  <a href="https://docs.mongodb.com/manual/reference/command/getLog/">logged MongoD events</a>, and the other for parsing and displaying external MongoDB log files. This tool will parse the log quickly and output general information about its contents, including timestamp, severity, component, context and command specific messages. It also allows you to <strong>save parsed log entries to MongoDB&#39;s collection</strong> so that you can further analyze and query the logs using MongoDB&#39;s find method.</p><p><img src="/blog/img/mongodb-log-viewer.png" alt="MongoDB log parser"> </p><h2><span id="database-profiler">Database profiler</span></h2><p>This simple feature will display the <a href="https://docs.mongodb.com/manual/tutorial/manage-the-database-profiler/">database profiler</a> logs information about database operations in &quot;system.profile&quot; collection. The profiler is off by default. You can enable the profiler on a per-database or per-instance basis at one of several profiling levels. By default, the slow operation threshold is 100 milliseconds. </p><p>Click here to learn <a href="https://docs.mongodb.com/manual/tutorial/manage-the-database-profiler/">how to manage the database profiler?</a> (Official documentation for MongoDB)</p><h2><span id="troubleshoot-replica-sets">Troubleshoot replica sets</span></h2><p>This feature is a partial implementation of each of the functions mentioned in <a href="https://docs.mongodb.com/manual/tutorial/troubleshoot-replica-sets/">this official document for MongoDB - Troubleshoot Replica Sets</a>.</p><p>It includes the following small features.</p><ul><li>Check Replica Set Status</li><li>Check the Replication Lag</li><li>Check the Size of the Oplog</li><li>Check and fix Oplog Entry Timestamp Error</li></ul><h1><span id="enhanced-data-viewer">Enhanced data viewer</span></h1><h2><span id="tooltip-for-array-object-and-objectid-values">Tooltip for array, object and ObjectId values</span></h2><p>How to display the array, object values in the data view is often a bit of a hassle. In V5, we add a more friendly tooltip for the array, object, and ObjectId values. </p><p><img src="/blog/img/tooltip-object-array.gif" alt="Tooltip for array and object values"> </p><h2><span id="one-click-group-by">One-click Group-By</span></h2><p>This handy feature allows grouping of the selected field in query results to calculate counts, totals, minimums, maximums, and averages with a single click.</p><p>The following example lists the total number and average weight of unicorns by gender.</p><p><img src="/blog/img/one-click-group-by.gif" alt="One-click Group-By"> </p><h2><span id="table-view-show-object-value-as-a-column-group">Table view, show object value as a column group</span></h2><p>Now, single-level, more straightforward object values are displayed as column groups within the table view. If an object value has many, complex fields, the object value is formatted as JSON text.</p><p><img src="/blog/img/table-view-column-group.png" alt="Object value as a column group"> </p><h2><span id="other-notable-improvements-for-the-data-view">Other notable improvements for the data view</span></h2><ul><li>More copy options, Copy value&#x2F;key-value pair&#x2F;document as plain JSON text or Mongo Shell JSON value.</li><li>One-click save query results as MongoDB read-only view, Pop-up right-click menu, Click &quot;Save This Query as MongoDB Read-only View&quot;</li><li>Table view, highlight selected field when view document, When you open the &quot;View Document&quot; dialog within table view, automatically scrolls and highlights to the selected field.</li><li>JSON view, allow view, add, edit and remove document within JSON View.</li><li>JSON view, add a new simple format for JSON view, it will displays all number values as plain text, no more NumberInt(123),  NumberLong(&quot;123456789&quot;), NumberDecimal(&quot;1234567.89&quot;)</li></ul><h1><span id="enhanced-script-editor">Enhanced script editor</span></h1><h2><span id="better-code-snippets">Better code snippets</span></h2><p>We offer tons of built-in snippets to help you writing MongoDB shell script effectively. In V5, We revised a large number of code snippets, better grouping, easy to find, easy to input. Typically, you only need to enter a few initial letters of the action, and you&#39;ll get the sample template code you need.</p><ul><li>Find, findByObjectId, findTextSearch, findWhereEq, Insert, Update, Delete ...</li><li>SQL, SQL-JOIN, SQL-SUM, SQL-IN-SELECT ...</li><li>Handy date range snippets, e.g. TodayDateRange, LastNWeeksDateRange, LastNMonthsDateRange ...</li><li>Simplify complex MongoDB shell command, e.g. aggregate, createUser, rs.initiate, rs.conf ...</li><li>If you come from a SQL background, these handy SQL to MongoDB conversion snippets may give you some help, </li><li>Create your snippets by hitting F8</li></ul><p><img src="/blog/img/v5-code-snippets.gif" alt="Code snippets"> </p><h2><span id="mark-changed-lines">Mark changed lines</span></h2><p>The feature lets you see which lines have been changed since the last save operation, the new&#x2F;modified lines are marked at the left margin. </p><p><img src="/blog/img/mark-changed-lines.gif" alt="Mark changed lines"> </p><h2><span id="switch-mongodb-connection-and-current-database-within-the-editor">Switch MongoDB connection and current database within the editor</span></h2><p>Now, you can open and switch MongoDB connection within the editor, and you also can change the current database within the editor. It even allows you to view and run scripts without a database Connection. In this case, NoSQLBooster looks much like an ES2017 playground which integrated Lodash, Shelljs, Moment.js and Node.js runtime.</p><p><img src="/blog/img/switch-connection-db-within-editor.gif" alt="Switch connection and database"> </p><h2><span id="list-opened-tabs">List opened tabs</span></h2><p>&quot;List Opened Tabs&quot; feature let you list and switch to another tab. It&#39;s handy if you opened a lot of tabs in a window.</p><p><img src="/blog/img/list-open-tabs.png" alt="List opened tabs"> </p><h1><span id="enhanced-connection-treex2fobject-explorer">Enhanced connection tree&#x2F;object explorer</span></h1><h2><span id="open-mongodb-shell-here">Open MongoDB shell here</span></h2><p>This feature allows you to open a new MongoDB Shell terminal via the context menu of the connection node. This is especially handy for SSH tunnel connections.</p><p><img src="/blog/img/open-mongoshell-here.gif" alt="Open MongoDB shell here"> </p><h2><span id="better-view-and-manage-your-indexes">Better view and manage your indexes</span></h2><p>The redesigned index management interface allows you to view index types, sizes, index usage, and other special properties more efficiently. Add and remove indexes at the click of a button.</p><p>  <img src="/blog/img/indexes-manager.png" alt="Indexes viewer"> </p><h2><span id="connection-node-tooltip-press-quotmquot-to-show-more-metrics">Connection node tooltip, press &quot;m&quot; to show more metrics</span></h2><p> Now, the tooltip for connection node can show more server status information, network in and out, memory, connections...,  press &quot;m&quot; to show more server metrics.</p><p><img src="/blog/img/connection-node-tooltip.gif" alt="Connection node tooltip"> </p><h1><span id="query-code-generator-improvements">Query code generator improvements</span></h1><h2><span id="create-a-query-code-sample-project">Create a query code sample project</span></h2><p>  Query Code Generator now not only generates query code for the target language (Node.js, Java, C#, Python) but also create sample projects for quick execution and testing of generated query code.</p><p>  The following video demonstrates how to create and run a java gradle project for MongoDB Query.</p><p>  <img src="/blog/img/query-code-create-sample-project.gif" alt="Query code create sample project"></p><h1><span id="other-notable-improvements">Other notable improvements</span></h1><h2><span id="more-quotrunquot-options">More &quot;Run&quot; options</span></h2><p>  Refactoring the &quot;Run&quot; button to a drop-down menu, adding more &quot;Run&quot; options.</p><p>  <img src="/blog/img/run-button-drop-menu.png" alt="&quot;Run&quot; drop menu"></p><h2><span id="filterable-connection-manager">Filterable connection manager</span></h2><p>  You are now able to filter connections by name, server, and security columns.</p><p>  <img src="/blog/img/filterable-connection-manager.gif" alt="Connection filter"></p><h2><span id="new-option-modify-default-limit-size">New option, modify default limit size</span></h2><p>   The &quot;%%limit%%&quot; variable can be used for code templates e.g. db.collection.find().limit(%%limit%%).<br>   Use  ** Menu -&gt; Options -&gt; Modify Default Code Template -&gt; Modify Default Limit Size...** to adjust the value, default size of this variable is 1000.<br>   BTW, you can use ** Menu -&gt; Options -&gt; Modify Default Code Template -&gt; Code Template for Opening Collection...** to customize the &quot;find&quot; code template which are used for opening collection.</p><p>   <img src="/blog/img/modify-find-code-template-v5.png" alt="modify &quot;find&quot; template"></p><h2><span id="schema-analyzer-support-json-schema">Schema analyzer, support JSON schema</span></h2><p>   Starting in version 3.6, MongoDB supports JSON Schema validation. Now, you can use NoSQLBooster schema analyzer to view specifies validation rules.     </p><p>   <img src="/blog/img/schema-json-validator.png" alt="View JSON validator"></p><h1><span id="minor-improvements-and-bugfix">Minor improvements and bugfix</span></h1><ul><li>New option, Use ** Menu -&gt; Options -&gt; Verbose Shell ** to activate&#x2F;deactivate the <a href="https://docs.mongodb.com/manual/reference/method/setVerboseShell/">verbose shell</a>.</li><li>Reduce server-side operations by caching results more intelligently</li><li>Upgrade major dependencies electron to 3.0, Chrome v66., Node v10.2, and V8 v6.6</li><li>Upgrade HackFont to 3.0</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-0/">MongoDB4.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Indexes/">Indexes</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL/">SQL</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-nosqlbooster-50-rc/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster for MongoDB 4.7.2 Released! Open Script Editor Faster</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-47-2/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-47-2/</guid>
      <pubDate>Fri, 07 Sep 2018 06:14:01 GMT</pubDate>
      
        
        
      <description>&lt;p&gt;We&amp;#39;re happy to release NoSQLBooster for MongoDB 4.7.2 today. This is a minor update, it is mainly to speed up the opening of the Scri</description>
        
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re happy to release NoSQLBooster for MongoDB 4.7.2 today. This is a minor update, it is mainly to speed up the opening of the Script editor, modify default code template for opening collection, along with some useful minor improvements and bugfix.</p><h1><span id="modify-default-code-template-for-opening-collection">Modify Default Code Template for Opening Collection</span></h1><p>NoSQLBooster 4.7.2 changed the default code template for opening a collection.It also added an option that allows the user to customize the code template</p><p>Main Menu-&gt;Options-&gt; &quot;Modify Default Code Template for Opening Collection...&quot;</p><p><img src="/blog/img/modify-default-code-template.png" alt="Modify Default Code Template"></p><h1><span id="bug-fixes-and-improvements">Bug Fixes and Improvements</span></h1><ul><li>Improved, speed up the opening of the Script editor</li><li>Changed, append running script indicator to output panel</li><li>Added, option: &quot;AutoExecute Script When Collection Node is Double-Clicked&quot;, toggle this option to enable&#x2F;disable auto-execute script when collection&#x2F;view node is double-clicked.</li><li>Fixed, connect mongodb+srv URI using SSH tunnel <a href="https://mongobooster.useresponse.com/topic/ports-not-accepted">#ref</a></li><li>Fixed, UUID function without arguments returns an error [#ref]<br>(<a href="https://mongobooster.useresponse.com/topic/uuid-function-without-arguments-returns-an-error">https://mongobooster.useresponse.com/topic/uuid-function-without-arguments-returns-an-error</a>)</li><li>Fixed, regression &quot;search using uuid helpers&quot; bug  [#ref]<br>(<a href="https://mongobooster.useresponse.com/topic/cannot-search-using-uuid-helpers-since-4-7-2">https://mongobooster.useresponse.com/topic/cannot-search-using-uuid-helpers-since-4-7-2</a>)</li><li>Fixed, table view header breaks the columns of the table when column name contains commas. <a href="https://mongobooster.useresponse.com/topic/table-view-header-breaks-the-columns-of-the-table">#ref</a></li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-0/">MongoDB4.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Editor/">Editor</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-47-2/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing NoSQLBooster 4.7!</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-47/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-47/</guid>
      <pubDate>Fri, 27 Jul 2018 02:00:01 GMT</pubDate>
      
      <description>&lt;p&gt;Today we&amp;#39;re happy to bring you NoSQLBooster 4.7.  We&amp;#39;ve got a few new items that we’re proud to highlight! Optimizes connection  management, making the new shell open more smoother, enhanced Object Explorer (Users and Roles node, Collection Schema and validator),  watch Collection&amp;#x2F;Database&amp;#x2F;Deployment data changes,  new SQL Functions(type conversion, string operations,date operations) and MongoDB ObjectId ↔ Timestamp Converter ...&lt;/p&gt;
&lt;p&gt;Let’s dive in and get an overview of what’s coming in NoSQLBooster 4.7!&lt;/p&gt;
&lt;h1 id=&quot;Hotfix&quot;&gt;&lt;a href=&quot;#Hotfix&quot; class=&quot;headerlink&quot; title=&quot;Hotfix&quot;&gt;&lt;/a&gt;Hotfix&lt;/h1&gt;&lt;h2 id=&quot;Hotfix-in-4-7-5&quot;&gt;&lt;a href=&quot;#Hotfix-in-4-7-5&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in 4.7.5&quot;&gt;&lt;/a&gt;Hotfix in 4.7.5&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, DBRef is missing $ref, $id, $db attributes &lt;a href=&quot;http://feedback.mongobooster.com/topic/dbref-does-not-work&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, Cannot use Object.bsonsize bug &lt;a href=&quot;http://feedback.mongobooster.com/topic/cannot-use-object-bsonsize&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, in the case of mixed Chinese and English input, the font is not displayed correctly bug&lt;/li&gt;
&lt;li&gt;Fixed, a Minor Python Query Code Generator bug&lt;/li&gt;
&lt;li&gt;Fixed, faker.finance.amount method stackoverflow bug&lt;/li&gt;
&lt;li&gt;Fixed, &amp;quot;NumberLong&amp;quot;,&amp;quot;NumberDecimal&amp;quot; method typing definition issue&lt;/li&gt;
&lt;li&gt;Fixed, View&amp;#x2F;Download files in GridFS collection, fails on Windows when file name contains braces &amp;#x2F; colon issue &lt;a href=&quot;http://feedback.mongobooster.com/topic/view-download-files-in-gridfs-collection-fails-on-windows-when-file-name-contains-braces-colon&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changed, set the default export batchsize value to 1000&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-4-7-3-and-4-7-4&quot;&gt;&lt;a href=&quot;#Hotfix-in-4-7-3-and-4-7-4&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in 4.7.3 and 4.7.4&quot;&gt;&lt;/a&gt;Hotfix in 4.7.3 and 4.7.4&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added, Add %%database%% variable to default collection window template &lt;a href=&quot;https://mongobooster.useresponse.com/topic/add-database-to-default-collection-window-template&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, NumberLong conversion fails for negative numbers &lt;a href=&quot;https://mongobooster.useresponse.com/topic/numberlong-conversion-fails-for-negative-numbers&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, regression &amp;quot;search using uuid helpers&amp;quot; bug  &lt;a href=&quot;https://mongobooster.useresponse.com/topic/cannot-search-using-uuid-helpers-since-4-7-2&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, regression &amp;quot;table view header breaks the columns of the table when column name contains commas&amp;quot; bug. &lt;a href=&quot;https://mongobooster.useresponse.com/topic/table-view-header-breaks-the-columns-of-the-table&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-4-7-2&quot;&gt;&lt;a href=&quot;#Hotfix-in-4-7-2&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in 4.7.2&quot;&gt;&lt;/a&gt;Hotfix in 4.7.2&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://nosqlbooster.com/blog/announcing-mongobooster-47-2/&quot;&gt;The release 4.7.2&lt;/a&gt; is a minor update, it is mainly to speed up the opening of the Script editor, modify default code template for opening collection.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved, speed up the opening of the Script editor&lt;/li&gt;
&lt;li&gt;Changed, append running script indicator to output panel&lt;/li&gt;
&lt;li&gt;Added, option: &amp;quot;AutoExecute Script When Collection Node is Double-Clicked&amp;quot;, toggle this option to enable&amp;#x2F;disable auto-execute script when collection&amp;#x2F;view node is double-clicked.&lt;/li&gt;
&lt;li&gt;Fixed, connect mongodb+srv URI using SSH tunnel &lt;a href=&quot;https://mongobooster.useresponse.com/topic/ports-not-accepted&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, UUID function without arguments returns an error &lt;a href=&quot;https://mongobooster.useresponse.com/topic/uuid-function-without-arguments-returns-an-error&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, table view header breaks the columns of the table when column name contains commas. &lt;a href=&quot;https://mongobooster.useresponse.com/topic/table-view-header-breaks-the-columns-of-the-table&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-4-7-1&quot;&gt;&lt;a href=&quot;#Hotfix-in-4-7-1&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in 4.7.1&quot;&gt;&lt;/a&gt;Hotfix in 4.7.1&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, Cut&amp;#x2F;Copy&amp;#x2F;Paste in editor context menu doesn&amp;#39;t work with MacOS.  &lt;a href=&quot;https://mongobooster.useresponse.com/topic/cutcopypaste-in-editor-context-menu-doesnt-work&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, the ability to increase the paging size does not work correctly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;Optimizes-Connection-Management&quot;&gt;&lt;a href=&quot;#Optimizes-Connection-Management&quot; class=&quot;headerlink&quot; title=&quot;Optimizes Connection Management&quot;&gt;&lt;/a&gt;Optimizes Connection Management&lt;/h1&gt;&lt;p&gt;In previous versions, each tab has an embedded MongoDB shell, and each embedded Shell will acquire an exclusive MongoDB client connection, the main purpose of this is to simplify programming and debugging, but the simple one-tab-one-connection model wastes connection resources and slows the opening of new tab.  In the new version, we use an all-application shared connection pool, the multiple-tabs-one-connection mechanism can greatly improve the efficiency of &amp;quot;open tab&amp;quot;, makes the application&amp;#39;s UI response smoother.  Please &lt;a href=&quot;https://www.nosqlbooster.com/downloads&quot;&gt;download&lt;/a&gt; to give it a shot now.&lt;/p&gt;
&lt;h1 id=&quot;Enhanced-Object-Explorer&quot;&gt;&lt;a href=&quot;#Enhanced-Object-Explorer&quot; class=&quot;headerlink&quot; title=&quot;Enhanced Object Explorer&quot;&gt;&lt;/a&gt;Enhanced Object Explorer&lt;/h1&gt;&lt;p&gt;NoSQLBooster 4.7 greatly enhanced Object Explorer, new global user and role nodes, new collection schema and validator nodes, database node&amp;#39;s storage size ...&lt;/p&gt;
&lt;h2 id=&quot;Database-object-explorer&quot;&gt;&lt;a href=&quot;#Database-object-explorer&quot; class=&quot;headerlink&quot; title=&quot;Database object explorer&quot;&gt;&lt;/a&gt;Database object explorer&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/blog/img/4.7-object-explorer.png&quot; alt=&quot;Database Object Explorer&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today we&#39;re happy to bring you NoSQLBooster 4.7.  We&#39;ve got a few new items that we’re proud to highlight! Optimizes connection  management, making the new shell open more smoother, enhanced Object Explorer (Users and Roles node, Collection Schema and validator),  watch Collection&#x2F;Database&#x2F;Deployment data changes,  new SQL Functions(type conversion, string operations,date operations) and MongoDB ObjectId ↔ Timestamp Converter ...</p><p>Let’s dive in and get an overview of what’s coming in NoSQLBooster 4.7!</p><h1><span id="hotfix">Hotfix</span></h1><h2><span id="hotfix-in-475">Hotfix in 4.7.5</span></h2><ul><li>Fixed, DBRef is missing $ref, $id, $db attributes <a href="http://feedback.mongobooster.com/topic/dbref-does-not-work">#ref</a></li><li>Fixed, Cannot use Object.bsonsize bug <a href="http://feedback.mongobooster.com/topic/cannot-use-object-bsonsize">#ref</a></li><li>Fixed, in the case of mixed Chinese and English input, the font is not displayed correctly bug</li><li>Fixed, a Minor Python Query Code Generator bug</li><li>Fixed, faker.finance.amount method stackoverflow bug</li><li>Fixed, &quot;NumberLong&quot;,&quot;NumberDecimal&quot; method typing definition issue</li><li>Fixed, View&#x2F;Download files in GridFS collection, fails on Windows when file name contains braces &#x2F; colon issue <a href="http://feedback.mongobooster.com/topic/view-download-files-in-gridfs-collection-fails-on-windows-when-file-name-contains-braces-colon">#ref</a></li><li>Changed, set the default export batchsize value to 1000</li></ul><h2><span id="hotfix-in-473-and-474">Hotfix in 4.7.3 and 4.7.4</span></h2><ul><li>Added, Add %%database%% variable to default collection window template <a href="https://mongobooster.useresponse.com/topic/add-database-to-default-collection-window-template">#ref</a></li><li>Fixed, NumberLong conversion fails for negative numbers <a href="https://mongobooster.useresponse.com/topic/numberlong-conversion-fails-for-negative-numbers">#ref</a></li><li>Fixed, regression &quot;search using uuid helpers&quot; bug  <a href="https://mongobooster.useresponse.com/topic/cannot-search-using-uuid-helpers-since-4-7-2">#ref</a></li><li>Fixed, regression &quot;table view header breaks the columns of the table when column name contains commas&quot; bug. <a href="https://mongobooster.useresponse.com/topic/table-view-header-breaks-the-columns-of-the-table">#ref</a></li></ul><h2><span id="hotfix-in-472">Hotfix in 4.7.2</span></h2><p><a href="https://nosqlbooster.com/blog/announcing-mongobooster-47-2/">The release 4.7.2</a> is a minor update, it is mainly to speed up the opening of the Script editor, modify default code template for opening collection.</p><ul><li>Improved, speed up the opening of the Script editor</li><li>Changed, append running script indicator to output panel</li><li>Added, option: &quot;AutoExecute Script When Collection Node is Double-Clicked&quot;, toggle this option to enable&#x2F;disable auto-execute script when collection&#x2F;view node is double-clicked.</li><li>Fixed, connect mongodb+srv URI using SSH tunnel <a href="https://mongobooster.useresponse.com/topic/ports-not-accepted">#ref</a></li><li>Fixed, UUID function without arguments returns an error <a href="https://mongobooster.useresponse.com/topic/uuid-function-without-arguments-returns-an-error">#ref</a></li><li>Fixed, table view header breaks the columns of the table when column name contains commas. <a href="https://mongobooster.useresponse.com/topic/table-view-header-breaks-the-columns-of-the-table">#ref</a></li></ul><h2><span id="hotfix-in-471">Hotfix in 4.7.1</span></h2><ul><li>Fixed, Cut&#x2F;Copy&#x2F;Paste in editor context menu doesn&#39;t work with MacOS.  <a href="https://mongobooster.useresponse.com/topic/cutcopypaste-in-editor-context-menu-doesnt-work">#ref</a></li><li>Fixed, the ability to increase the paging size does not work correctly.</li></ul><h1><span id="optimizes-connection-management">Optimizes Connection Management</span></h1><p>In previous versions, each tab has an embedded MongoDB shell, and each embedded Shell will acquire an exclusive MongoDB client connection, the main purpose of this is to simplify programming and debugging, but the simple one-tab-one-connection model wastes connection resources and slows the opening of new tab.  In the new version, we use an all-application shared connection pool, the multiple-tabs-one-connection mechanism can greatly improve the efficiency of &quot;open tab&quot;, makes the application&#39;s UI response smoother.  Please <a href="https://www.nosqlbooster.com/downloads">download</a> to give it a shot now.</p><h1><span id="enhanced-object-explorer">Enhanced Object Explorer</span></h1><p>NoSQLBooster 4.7 greatly enhanced Object Explorer, new global user and role nodes, new collection schema and validator nodes, database node&#39;s storage size ...</p><h2><span id="database-object-explorer">Database object explorer</span></h2><p><img src="/blog/img/4.7-object-explorer.png" alt="Database Object Explorer"></p><span id="more"></span><h2><span id="user-and-roles-management">User and Roles Management</span></h2><p><img src="/blog/img/user-add-user-template.png" alt="User and Roles Management"></p><h1><span id="mongodb-40-support">MongoDB 4.0 support</span></h1><h2><span id="new-sql-functions-type-conversion-string-operations-date-operations">New SQL Functions, Type Conversion, String Operations, Date Operations</span></h2><p>MongoDB 4.0 adds many new aggregation operators for type conversion, string operations and date operations. NoSQLBooster 4.7 allows new MongoDB 4.0 aggregation operators are available for NoSQLBooster SQL Query in the form of SQL Functions.</p><h3><span id="type-conversion">Type Conversion</span></h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    SELECT toInt(&#x27;20&#x27;) as int,</span></span><br><span class="line"><span class="string">         toBool(&#x27;true&#x27;) as bool,</span></span><br><span class="line"><span class="string">         toDate(&#x27;2018-01-01&#x27;) as date,</span></span><br><span class="line"><span class="string">         convert(&#x27;20&#x27;,&#x27;long&#x27;,onError=&#x27;error&#x27;, onNull=null) as long, //named parameters</span></span><br><span class="line"><span class="string">         convert(null,&#x27;int&#x27;,onError=&#x27;error&#x27;, onNull=null) as intOnNull,</span></span><br><span class="line"><span class="string">         convert(&#x27;abc&#x27;,&#x27;int&#x27;,&#x27;error&#x27;, null) as intOnError</span></span><br><span class="line"><span class="string">         FROM testCollection</span></span><br><span class="line"><span class="string">`</span>).<span class="title function_">limit</span>(<span class="number">1</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">//output</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : <span class="title class_">ObjectId</span>(<span class="string">&quot;5b24b34c1456d826b8a5e05e&quot;</span>),</span><br><span class="line"><span class="string">&quot;int&quot;</span> : <span class="number">20</span>,</span><br><span class="line"><span class="string">&quot;bool&quot;</span> : <span class="literal">true</span>,</span><br><span class="line"><span class="string">&quot;date&quot;</span> : <span class="title class_">ISODate</span>(<span class="string">&quot;2018-01-01T00:00:00.000Z&quot;</span>),</span><br><span class="line"><span class="string">&quot;long&quot;</span> : <span class="title class_">NumberLong</span>(<span class="string">&quot;20&quot;</span>),</span><br><span class="line"><span class="string">&quot;intOnNull&quot;</span> : <span class="literal">null</span>,</span><br><span class="line"><span class="string">&quot;intOnError&quot;</span> : <span class="string">&quot;error&quot;</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3><span id="string-operations">String Operations</span></h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    SELECT trim(&#x27; abc &#x27;) as trim,</span></span><br><span class="line"><span class="string">           trim(&#x27; ggggoodbyeeeee&#x27;, chars=&#x27;ge&#x27;) as trimChars,</span></span><br><span class="line"><span class="string">           ltrim(&#x27; abc &#x27;) as ltrim,</span></span><br><span class="line"><span class="string">           rtrim(&#x27; abc  &#x27;) as rtrim</span></span><br><span class="line"><span class="string">           FROM testCollection</span></span><br><span class="line"><span class="string">`</span>).<span class="title function_">limit</span>(<span class="number">1</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">//output</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : <span class="title class_">ObjectId</span>(<span class="string">&quot;5b24b34c1456d826b8a5e05e&quot;</span>),</span><br><span class="line"><span class="string">&quot;trim&quot;</span> : <span class="string">&quot;abc&quot;</span>,</span><br><span class="line"><span class="string">&quot;trimChars&quot;</span> : <span class="string">&quot; ggggoodby&quot;</span>,</span><br><span class="line"><span class="string">&quot;ltrim&quot;</span> : <span class="string">&quot;abc &quot;</span>,</span><br><span class="line"><span class="string">&quot;rtrim&quot;</span> : <span class="string">&quot; abc&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3><span id="date-operations">Date Operations</span></h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    SELECT dateToString(format=&#x27;%Y-%m-%d %H:%M:%S:%L%z&#x27;, date=&#x27;$hire_date&#x27;, timezone=&#x27;+08:00&#x27;) as dateStr,</span></span><br><span class="line"><span class="string">           dateToParts(&quot;hire_date&quot;,&#x27;+08:00&#x27;) as dateParts    </span></span><br><span class="line"><span class="string">           FROM employees</span></span><br><span class="line"><span class="string">`</span>).<span class="title function_">limit</span>(<span class="number">1</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">//output</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : <span class="title class_">ObjectId</span>(<span class="string">&quot;597829d858319165c841708b&quot;</span>),</span><br><span class="line"><span class="string">&quot;dateStr&quot;</span> : <span class="string">&quot;2016-01-02 08:00:00:000+0800&quot;</span>,</span><br><span class="line"><span class="string">&quot;dateParts&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;year&quot;</span> : <span class="number">2016</span>,</span><br><span class="line"><span class="string">&quot;month&quot;</span> : <span class="number">1</span>,</span><br><span class="line"><span class="string">&quot;day&quot;</span> : <span class="number">2</span>,</span><br><span class="line"><span class="string">&quot;hour&quot;</span> : <span class="number">8</span>,</span><br><span class="line"><span class="string">&quot;minute&quot;</span> : <span class="number">0</span>,</span><br><span class="line"><span class="string">&quot;second&quot;</span> : <span class="number">0</span>,</span><br><span class="line"><span class="string">&quot;millisecond&quot;</span> : <span class="number">0</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>Better yet, all SQL Functions provide the appropriate code snippets and mouse hover information and support code completion</p><p><img src="/blog/img/sql-mongo4-code-complete.png" alt="SQL Function Code Complete"></p><h2><span id="watch-databasex2fdeployment-data-changes">Watch Database&#x2F;Deployment Data Changes</span></h2><p>Starting in MongoDB 4.0, you can open a change stream cursor for collection, database or deployment (either a replica set or a sharded cluster) to watch for data changes. In NoSQLBooster 4.7, We have also added UI and code snippet which allow you to watch database&#x2F;deployment data changes with a few clicks.</p><p>Right-click the database node, pop up context menu and select the &quot;Watch Database (MongoDB 4.0+)&quot;</p><p><img src="/blog/img/watch-database.png" alt="Watch Database"></p><p>Right-click the connection node, pop up context menu and select the &quot;Watch Deployment (MongoDB 4.0+)&quot;<br><img src="/blog/img/watch-deployment.png" alt="Watch Deployment"></p><h1><span id="minor-improvements">Minor Improvements</span></h1><h2><span id="added-more-options-for-formatting-dates">Added More Options for Formatting Dates</span></h2><p><img src="/blog/img/formatting_dates_options.png" alt="Display DateTime in"></p><h2><span id="mongodb-objectid-timestamp-converter-javascript-functions">MongoDB ObjectId ↔ Timestamp Converter (Javascript Functions)</span></h2><p>NoSQLBooster 4.7 adds two new tool functions for ObjectId ↔ Timestamp conversion.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">var</span> objectIdFromDate = <span class="keyword">function</span> (<span class="params">date</span>) &#123; <span class="comment">//convert date to objectId</span></span><br><span class="line"><span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ObjectId</span>(<span class="title class_">Math</span>.<span class="title function_">floor</span>(date.<span class="title function_">getTime</span>() / <span class="number">1000</span>).<span class="title function_">toString</span>(<span class="number">16</span>) + <span class="string">&quot;0000000000000000&quot;</span>);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">var</span> dateFromObjectId = <span class="keyword">function</span> (<span class="params">objectId</span>) &#123; <span class="comment">//convert objectId to date</span></span><br><span class="line"><span class="keyword">return</span> objectId.<span class="title function_">getTimestamp</span>()</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4><span id="why-generate-an-objectid-from-a-timestamp">Why generate an ObjectId from a timestamp?</span></h4><p>Each MongoDB ObjectId contains an embedded timestamp of its creation time, to query documents by creation date.</p><p>e.g. to find all comments created after 2013-11-01:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//NoSQLBooster fluid query</span></span><br><span class="line">db.<span class="property">comments</span>.<span class="title function_">where</span>(<span class="string">&quot;_id&quot;</span>).<span class="title function_">gt</span>(<span class="title function_">objectIdFromDate</span>(<span class="title class_">ISODate</span>(<span class="string">&quot;2013-11-01&quot;</span>)))</span><br><span class="line"></span><br><span class="line"><span class="comment">//or</span></span><br><span class="line">db.<span class="property">comments</span>.<span class="title function_">find</span>(&#123;<span class="attr">_id</span>: &#123;<span class="attr">$gt</span>: <span class="title function_">objectIdFromDate</span>(<span class="title class_">ISODate</span>(<span class="string">&quot;2013-11-01&quot;</span>))&#125;&#125;)</span><br></pre></td></tr></table></figure><p>More about this topic, please refer to: <a href="https://steveridout.github.io/mongo-object-time/">mongo-object-time</a></p><h2><span id="auto-update-on-linux">Auto-update on Linux</span></h2><p>In addition to Windows and Macs, NoSQLBooster 4.7 adds auto-update feature on Linux . The auto-updates feature enable NoSQLBooster to automatically update itself, so your copy will always be up-to-date. </p><h1><span id="bugfix">Bugfix</span></h1><ul><li>New, close current active windows&#x2F;tab&#x2F;dialog using the shortcut key (CMD + W)</li><li>Fixed, TTL with 0 seconds doesn&#39;t create the script correctly. <a href="https://mongobooster.useresponse.com/topic/ttl-with-0-seconds-doesnt-create-the-script-correctly">#ref</a></li><li>Fixed, no context menu to cut&#x2F;copy&#x2F;paste&#x2F;delete in document values tree view. <a href="https://mongobooster.useresponse.com/topic/no-context-menu-to-cutcopypastedelete-in-document-values-tree-view">#ref</a></li><li>Fixed, SQL translate bug &quot;SELECT  toInt(category_id) as category FROM categories where category &gt; 20&quot;</li><li>Changed, &quot;Open and edit&quot; action -&gt; &quot;Open Connection Editor&quot; in &quot;From URI...&quot; dialog</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-0/">MongoDB4.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Transaction/">Transaction</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Connection/">Connection</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-47/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster for MongoDB 4.6 Released! official support for MongoDB 4.0</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-46/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-46/</guid>
      <pubDate>Mon, 02 Jul 2018 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 4.6 today. This version includes official support for MongoDB 4.0 along with some useful minor improvements and bugfix. For more information on MongoDB 4.0 , see &lt;a href=&quot;https://docs.mongodb.com/manual/release-notes/4.0/&quot;&gt;Release Notes for MongoDB 4.0&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;Hotfix&quot;&gt;&lt;a href=&quot;#Hotfix&quot; class=&quot;headerlink&quot; title=&quot;Hotfix&quot;&gt;&lt;/a&gt;Hotfix&lt;/h1&gt;&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-6-1&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-6-1&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.6.1&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.6.1&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, a serious bug that prevented the query builder and aggregate method from working. &lt;a href=&quot;https://mongobooster.useresponse.com/topic/Weird-behaviour-with-query-builder-and-indexes&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;MongoDB-4-0-support&quot;&gt;&lt;a href=&quot;#MongoDB-4-0-support&quot; class=&quot;headerlink&quot; title=&quot;MongoDB 4.0 support&quot;&gt;&lt;/a&gt;MongoDB 4.0 support&lt;/h1&gt;&lt;p&gt;NoSQLBooster for MongoDB 4.6 upgrades embedded MongoShell to 4.0, adds support for all the new shell methods and operations of MongoDB 4.0. Multi-Document Transactions and New Type Conversion Operators.&lt;/p&gt;
&lt;p&gt;WARNING: MongoDB 2.4 reached end of life in March of 2016, MongoDB Node.js 3.x driver dropped support for MongoDB 2.4 or below. Beginning in NoSQLBooster for MongoDB 4.5, versions of MongoDB server prior to version 2.6 are no longer supported.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/multi_doc_transactions.png&quot; alt=&quot;Transactions&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;Minor-Improvements&quot;&gt;&lt;a href=&quot;#Minor-Improvements&quot; class=&quot;headerlink&quot; title=&quot;Minor Improvements&quot;&gt;&lt;/a&gt;Minor Improvements&lt;/h1&gt;&lt;h2 id=&quot;Connection-troubleshoot&quot;&gt;&lt;a href=&quot;#Connection-troubleshoot&quot; class=&quot;headerlink&quot; title=&quot;Connection troubleshoot&quot;&gt;&lt;/a&gt;Connection troubleshoot&lt;/h2&gt;&lt;p&gt;Added connection log console to show debugging data when a &amp;quot;test connection are being established.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/connection_troubleshoot.png&quot; alt=&quot;connection_troubleshoot&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 4.6 today. This version includes official support for MongoDB 4.0 along with some useful minor improvements and bugfix. For more information on MongoDB 4.0 , see <a href="https://docs.mongodb.com/manual/release-notes/4.0/">Release Notes for MongoDB 4.0</a>.</p><h1><span id="hotfix">Hotfix</span></h1><h2><span id="hotfix-in-mongobooster-461">Hotfix in MongoBooster 4.6.1</span></h2><ul><li>Fixed, a serious bug that prevented the query builder and aggregate method from working. <a href="https://mongobooster.useresponse.com/topic/Weird-behaviour-with-query-builder-and-indexes">#ref</a></li></ul><h1><span id="mongodb-40-support">MongoDB 4.0 support</span></h1><p>NoSQLBooster for MongoDB 4.6 upgrades embedded MongoShell to 4.0, adds support for all the new shell methods and operations of MongoDB 4.0. Multi-Document Transactions and New Type Conversion Operators.</p><p>WARNING: MongoDB 2.4 reached end of life in March of 2016, MongoDB Node.js 3.x driver dropped support for MongoDB 2.4 or below. Beginning in NoSQLBooster for MongoDB 4.5, versions of MongoDB server prior to version 2.6 are no longer supported.</p><p><img src="/blog/img/multi_doc_transactions.png" alt="Transactions"></p><h1><span id="minor-improvements">Minor Improvements</span></h1><h2><span id="connection-troubleshoot">Connection troubleshoot</span></h2><p>Added connection log console to show debugging data when a &quot;test connection are being established.</p><p><img src="/blog/img/connection_troubleshoot.png" alt="connection_troubleshoot"></p><span id="more"></span><h2><span id="allows-saving-and-editing-dns-seeds-connections">Allows saving and editing DNS Seeds Connections</span></h2><p><img src="/blog/img/dns_seeds_connections.png" alt="dns_seeds_connections"></p><h2><span id="add-firstx2flast-navigation-buttons-ref">Add first&#x2F;last navigation buttons </span></h2><p><img src="/blog/img/first_last_navigation_buttons.png" alt="First_Last_Button"></p><h2><span id="added-more-options-for-formatting-numbers">Added more options for formatting numbers</span></h2><p><img src="/blog/img/formatting_numbers_options.png" alt="Formatting_numbers_options"></p><h1><span id="bugfix">Bugfix</span></h1><ul><li>Fixed, no context menu in the &quot;connection editor&quot; text boxes <a href="https://mongobooster.useresponse.com/topic/no-context-menu-in-the-connection-editor-textboxes">#ref</a></li><li>Fixed, tree view arrays within documents won&#39;t expand after changing output panel option <a href="https://mongobooster.useresponse.com/topic/tree-view-arrays-within-documents-wont-expand-after-changing-output-panel-option">#ref</a></li><li>Fixed, Closing a tab right after running a script make the program freeze <a href="https://mongobooster.useresponse.com/topic/closing-a-tab-right-after-the-script-run-make-the-program-freeze">#ref</a></li><li>Fixed, unable to start local mongo instance when connected via ssh to a remote instance  <a href="https://mongobooster.useresponse.com/topic/unable-to-start-local-mongo-instance-when-connected-via-ssh-to-a-remote-instance">#ref</a></li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB4-0/">MongoDB4.0</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Transaction/">Transaction</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-46/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster 4.5 released, with significant improvements to SQL Query for MongoDB</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-45/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-45/</guid>
      <pubDate>Mon, 12 Feb 2018 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;&lt;small&gt;By &lt;a href=&quot;qinghai@nosqlbooster.com&quot;&gt;Qinghai&lt;/a&gt; | February 12, 2018&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;NoSQLBooster 4.5&lt;/a&gt;. This version introduces a bunch of significant improvements SQL Query for MongoDB along with some minor improvements and bugfix. &lt;/p&gt;
&lt;p&gt;If you’re not familiar with NoSQLBooster(formerly MongoBooster), it is a shell-centric cross-platform(Windows, Mac, Linux) GUI tool for MongoDB v2.6-3.6, which provides fluent query builder, SQL Query, update-in-place, ES2017 syntax support and true intellisense experience.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/downloads&quot;&gt;NoSQLBooster Download Link&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;/runSQLQuery&quot;&gt;How to Query MongoDB with SQL?&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;Hotfix&quot;&gt;&lt;a href=&quot;#Hotfix&quot; class=&quot;headerlink&quot; title=&quot;Hotfix&quot;&gt;&lt;/a&gt;Hotfix&lt;/h1&gt;&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-5-6&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-5-6&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.5.6&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.5.6&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, unable to do a CSV export, throw &amp;quot;mongo.convertBsonObjToCsvStr is not a function&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-5-5&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-5-5&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.5.5&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.5.5&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, AppImage icon does not show up in Ubuntu GNOME &lt;a href=&quot;https://mongobooster.useresponse.com/topic/icon-not-showing-up-when-switch-window-on-ubuntu-gnome&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, sorting a table by Int or Double column sorts them as a string &lt;a href=&quot;https://mongobooster.useresponse.com/topic/sorting-a-table-by-int-or-double-column-sorts-them-as-a-string&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added, two new items to context menu of &amp;quot;table&amp;quot; view. &amp;#39;Copy Document(s) to Clipboard - Tab-Separated Values&amp;#39; and &amp;#39;Copy Document(s) to Clipboard - Comma-separated Values&amp;#39;&lt;/li&gt;
&lt;li&gt;Improved, &amp;quot;showIndex&amp;quot; code template for MongoDB sharded cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-5-4&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-5-4&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.5.4&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.5.4&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added, auth option: Always ask for password when connecting to MongoDB database &lt;a href=&quot;https://mongobooster.useresponse.com/topic/allow-asking-for-the-database-password&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improved, export to CSV, Add a BOM character at the beginning of the csv to make Excel displaying special characters correctly&lt;/li&gt;
&lt;li&gt;Fixed, a minor UI bug in displaying recent history scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-5-3&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-5-3&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.5.3&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.5.3&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed, east asian language input does not work properly &lt;a href=&quot;http://feedback.mongobooster.com/topic/korean-language-input-does-not-work-properly&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, $unwinds, cannot select middle item on the tree &lt;a href=&quot;http://feedback.mongobooster.com/topic/version-4-unwinds-cannot-select-middle-item-on-the-tree&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, instanceof keyword is not working as intended bug &lt;a href=&quot;http://feedback.mongobooster.com/topic/instanceof-keyword-is-not-working-as-intended&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, mongo.NumberInt(&lt;code&gt;$&amp;#123;record[key]&amp;#125;&lt;/code&gt;) throws an error when record[key] &amp;#x3D; 10004743968 &lt;a href=&quot;http://feedback.mongobooster.com/topic/mongo-numberintrecordkey-throws-an-error-when-recordkey-10004743968&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, Int64 truncated as Int32 bug in table &amp;amp; tree view &lt;a href=&quot;http://feedback.mongobooster.com/topic/int64-truncated-as-int32-in-table-tree-view-v4-5-2&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, out of range bug when importing a table-view from MSSQL with more than 1000 rows &lt;a href=&quot;http://feedback.mongobooster.com/topic/when-importing-a-table-view-from-mssql-with-more-than-1000-rows-i-get-an-error&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, convert ObjectId to hexadecimal string bug &lt;a href=&quot;http://feedback.mongobooster.com/topic/cannot-convert-objectid-to-hexadecimal-string&quot;&gt;#ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-5-2&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-5-2&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.5.2&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.5.2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;New, &amp;quot;New Shell Tab...&amp;quot; and &amp;quot;New SQL Query Tab...&amp;quot; buttons to main toolbar&lt;/li&gt;
&lt;li&gt;New option, Menu-&amp;gt;Options-&amp;gt; Output Panel-&amp;gt; Keeping Input Focus on the Editor After Running (default false)&lt;/li&gt;
&lt;li&gt;Improved, If the script does not need to be executed immediately, the editor window is maximized by default&lt;/li&gt;
&lt;li&gt;Improved, Using IndexedDB instead of local storage to store history scripts&lt;/li&gt;
&lt;li&gt;Changed, Export features will be disabled after the trial period&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-4-5-1&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-4-5-1&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 4.5.1&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 4.5.1&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;New, SQL Query: add RegExp Constructor Function e.g. select * from table where name &amp;#x3D; RegExp(&amp;#39;^hai&amp;#39;,&amp;#39;i&amp;#39;)&lt;/li&gt;
&lt;li&gt;Fixed, a bug when storing history script &lt;a href=&quot;https://mongobooster.useresponse.com/topic/cant-run-any-query-after-4-5-update-i-get-a-blank-screen&quot;&gt;ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, a shell and C# generator bug &lt;a href=&quot;https://mongobooster.useresponse.com/topic/generate-code-for-shell-and-c-feature-is-buggy&quot;&gt;ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixed, NoSQLBoooster runs out of Memory with Big BSON Documents &amp;#x3D;&amp;gt; blank screen. &lt;a href=&quot;https://mongobooster.useresponse.com/topic/nosqlboooster-runs-out-of-memory-blank-screen&quot;&gt;ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Enabled MongoDB Enterprise Connection in free edition&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;SQL-Query-Improvements&quot;&gt;&lt;a href=&quot;#SQL-Query-Improvements&quot; class=&quot;headerlink&quot; title=&quot;SQL Query Improvements&quot;&gt;&lt;/a&gt;SQL Query Improvements&lt;/h1&gt;&lt;h2 id=&quot;The-toJS-SQL-Function-and-named-parameter&quot;&gt;&lt;a href=&quot;#The-toJS-SQL-Function-and-named-parameter&quot; class=&quot;headerlink&quot; title=&quot;The &amp;quot;toJS&amp;quot; SQL Function and named parameter&quot;&gt;&lt;/a&gt;The &amp;quot;toJS&amp;quot; SQL Function and named parameter&lt;/h2&gt;&lt;p&gt;NoSQLBooster 4.5 supports named parameter in SQL function. The new “toJS” helper function transforms the named parameters and arithmetic operator to a JSON object, also transforms an ordinary parameter list into an array.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(k=&lt;span class=&quot;string&quot;&gt;&amp;#x27;v&amp;#x27;&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;//result &amp;#123;k:&amp;#x27;v&amp;#x27;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(k=&lt;span class=&quot;string&quot;&gt;&amp;quot;v&amp;quot;&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;//result &amp;#123;k:&amp;#x27;$v&amp;#x27;&amp;#125;, Double quotes quote object names&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(k=v); &lt;span class=&quot;comment&quot;&gt;//result &amp;#123;k:&amp;#x27;$v&amp;#x27;&amp;#125;, without quote, v is a object name&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(k&amp;gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;, k&amp;lt;=&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;//result  &amp;#123; &amp;quot;k&amp;quot;: &amp;#123; &amp;quot;$gt&amp;quot;: 5, &amp;quot;$lte&amp;quot;: 10&amp;#125; &amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(a=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, b=&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(b1=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;, b2=&lt;span class=&quot;string&quot;&gt;&amp;#x27;b2&amp;#x27;&lt;/span&gt;)); &lt;span class=&quot;comment&quot;&gt;//result &amp;#123;a : 1, b : &amp;#123;b1 : 2,	b2 : &amp;quot;b2&amp;quot;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;title function_&quot;&gt;toJS&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&amp;#x27;3&amp;#x27;&lt;/span&gt;); &lt;span class=&quot;comment&quot;&gt;// result  [1,2,&amp;#x27;3&amp;#x27;];&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;With named parameter and &amp;quot;toJS&amp;quot; helper function, you can query complex objects or pass JSON-object parameter to a SQL function.&lt;/p&gt;
&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;--elemMatch, named parameter and Arithmetic operators&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;--cool stuff,  (score&amp;gt;8, score&amp;lt;=10) will be translated as  &amp;#123;&amp;quot;score&amp;quot;: &amp;#123; &amp;quot;$gt&amp;quot;: 8, &amp;quot;$lte&amp;quot;: 10 &amp;#125;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; survey &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; results &lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;elemMatch(item&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;abc&amp;#x27;&lt;/span&gt;, score&lt;span class=&quot;operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;, score&lt;span class=&quot;operator&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;--date timezone, named parameter&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;year&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&amp;quot;date&amp;quot;, timezone&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;America/Chicago&amp;#x27;&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;year&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; sales&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;--query object type value, object_field: &amp;#123; a : 1, b : &amp;#123;b1 : 2,	b2 : &amp;quot;b2&amp;quot;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; collection &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; object_field &lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt; toJS(a&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, b&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;toJS(b1&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;, b2&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;b2&amp;#x27;&lt;/span&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- text search with full text search options&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; article &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   $text &lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt; toJS($&lt;span class=&quot;keyword&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;cake&amp;#x27;&lt;/span&gt;,  $&lt;span class=&quot;keyword&quot;&gt;language&lt;/span&gt;&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&amp;#x27;en&amp;#x27;&lt;/span&gt;, $caseSensitive&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;, $diacriticSensitive&lt;span class=&quot;operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;) &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; literal(toJS(k&lt;span class=&quot;operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;, k&lt;span class=&quot;operator&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;))  &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; collection&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p><small>By <a href="qinghai@nosqlbooster.com">Qinghai</a> | February 12, 2018</small></p><p>Today, we&#39;re happy to announce the release of <a href="/downloads">NoSQLBooster 4.5</a>. This version introduces a bunch of significant improvements SQL Query for MongoDB along with some minor improvements and bugfix. </p><p>If you’re not familiar with NoSQLBooster(formerly MongoBooster), it is a shell-centric cross-platform(Windows, Mac, Linux) GUI tool for MongoDB v2.6-3.6, which provides fluent query builder, SQL Query, update-in-place, ES2017 syntax support and true intellisense experience.</p><p><a href="/downloads">NoSQLBooster Download Link</a><br><a href="/runSQLQuery">How to Query MongoDB with SQL?</a></p><h1><span id="hotfix">Hotfix</span></h1><h2><span id="hotfix-in-mongobooster-456">Hotfix in MongoBooster 4.5.6</span></h2><ul><li>Fixed, unable to do a CSV export, throw &quot;mongo.convertBsonObjToCsvStr is not a function&quot;</li></ul><h2><span id="hotfix-in-mongobooster-455">Hotfix in MongoBooster 4.5.5</span></h2><ul><li>Fixed, AppImage icon does not show up in Ubuntu GNOME <a href="https://mongobooster.useresponse.com/topic/icon-not-showing-up-when-switch-window-on-ubuntu-gnome">#ref</a></li><li>Fixed, sorting a table by Int or Double column sorts them as a string <a href="https://mongobooster.useresponse.com/topic/sorting-a-table-by-int-or-double-column-sorts-them-as-a-string">#ref</a></li><li>Added, two new items to context menu of &quot;table&quot; view. &#39;Copy Document(s) to Clipboard - Tab-Separated Values&#39; and &#39;Copy Document(s) to Clipboard - Comma-separated Values&#39;</li><li>Improved, &quot;showIndex&quot; code template for MongoDB sharded cluster</li></ul><h2><span id="hotfix-in-mongobooster-454">Hotfix in MongoBooster 4.5.4</span></h2><ul><li>Added, auth option: Always ask for password when connecting to MongoDB database <a href="https://mongobooster.useresponse.com/topic/allow-asking-for-the-database-password">#ref</a></li><li>Improved, export to CSV, Add a BOM character at the beginning of the csv to make Excel displaying special characters correctly</li><li>Fixed, a minor UI bug in displaying recent history scripts</li></ul><h2><span id="hotfix-in-mongobooster-453">Hotfix in MongoBooster 4.5.3</span></h2><ul><li>Fixed, east asian language input does not work properly <a href="http://feedback.mongobooster.com/topic/korean-language-input-does-not-work-properly">#ref</a></li><li>Fixed, $unwinds, cannot select middle item on the tree <a href="http://feedback.mongobooster.com/topic/version-4-unwinds-cannot-select-middle-item-on-the-tree">#ref</a></li><li>Fixed, instanceof keyword is not working as intended bug <a href="http://feedback.mongobooster.com/topic/instanceof-keyword-is-not-working-as-intended">#ref</a></li><li>Fixed, mongo.NumberInt(<code>$&#123;record[key]&#125;</code>) throws an error when record[key] &#x3D; 10004743968 <a href="http://feedback.mongobooster.com/topic/mongo-numberintrecordkey-throws-an-error-when-recordkey-10004743968">#ref</a></li><li>Fixed, Int64 truncated as Int32 bug in table &amp; tree view <a href="http://feedback.mongobooster.com/topic/int64-truncated-as-int32-in-table-tree-view-v4-5-2">#ref</a></li><li>Fixed, out of range bug when importing a table-view from MSSQL with more than 1000 rows <a href="http://feedback.mongobooster.com/topic/when-importing-a-table-view-from-mssql-with-more-than-1000-rows-i-get-an-error">#ref</a></li><li>Fixed, convert ObjectId to hexadecimal string bug <a href="http://feedback.mongobooster.com/topic/cannot-convert-objectid-to-hexadecimal-string">#ref</a></li></ul><h2><span id="hotfix-in-mongobooster-452">Hotfix in MongoBooster 4.5.2</span></h2><ul><li>New, &quot;New Shell Tab...&quot; and &quot;New SQL Query Tab...&quot; buttons to main toolbar</li><li>New option, Menu-&gt;Options-&gt; Output Panel-&gt; Keeping Input Focus on the Editor After Running (default false)</li><li>Improved, If the script does not need to be executed immediately, the editor window is maximized by default</li><li>Improved, Using IndexedDB instead of local storage to store history scripts</li><li>Changed, Export features will be disabled after the trial period</li></ul><h2><span id="hotfix-in-mongobooster-451">Hotfix in MongoBooster 4.5.1</span></h2><ul><li>New, SQL Query: add RegExp Constructor Function e.g. select * from table where name &#x3D; RegExp(&#39;^hai&#39;,&#39;i&#39;)</li><li>Fixed, a bug when storing history script <a href="https://mongobooster.useresponse.com/topic/cant-run-any-query-after-4-5-update-i-get-a-blank-screen">ref</a></li><li>Fixed, a shell and C# generator bug <a href="https://mongobooster.useresponse.com/topic/generate-code-for-shell-and-c-feature-is-buggy">ref</a></li><li>Fixed, NoSQLBoooster runs out of Memory with Big BSON Documents &#x3D;&gt; blank screen. <a href="https://mongobooster.useresponse.com/topic/nosqlboooster-runs-out-of-memory-blank-screen">ref</a></li><li><em><strong>Enabled MongoDB Enterprise Connection in free edition</strong></em></li></ul><h1><span id="sql-query-improvements">SQL Query Improvements</span></h1><h2><span id="the-quottojsquot-sql-function-and-named-parameter">The &quot;toJS&quot; SQL Function and named parameter</span></h2><p>NoSQLBooster 4.5 supports named parameter in SQL function. The new “toJS” helper function transforms the named parameters and arithmetic operator to a JSON object, also transforms an ordinary parameter list into an array.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">toJS</span>(k=<span class="string">&#x27;v&#x27;</span>); <span class="comment">//result &#123;k:&#x27;v&#x27;&#125;</span></span><br><span class="line"><span class="title function_">toJS</span>(k=<span class="string">&quot;v&quot;</span>); <span class="comment">//result &#123;k:&#x27;$v&#x27;&#125;, Double quotes quote object names</span></span><br><span class="line"><span class="title function_">toJS</span>(k=v); <span class="comment">//result &#123;k:&#x27;$v&#x27;&#125;, without quote, v is a object name</span></span><br><span class="line"><span class="title function_">toJS</span>(k&gt;<span class="number">5</span>, k&lt;=<span class="number">10</span>); <span class="comment">//result  &#123; &quot;k&quot;: &#123; &quot;$gt&quot;: 5, &quot;$lte&quot;: 10&#125; &#125;</span></span><br><span class="line"><span class="title function_">toJS</span>(a=<span class="number">1</span>, b=<span class="title function_">toJS</span>(b1=<span class="number">2</span>, b2=<span class="string">&#x27;b2&#x27;</span>)); <span class="comment">//result &#123;a : 1, b : &#123;b1 : 2,b2 : &quot;b2&quot;&#125;</span></span><br><span class="line"><span class="title function_">toJS</span>(<span class="number">1</span>, <span class="number">2</span>,<span class="string">&#x27;3&#x27;</span>); <span class="comment">// result  [1,2,&#x27;3&#x27;];</span></span><br></pre></td></tr></table></figure><p>With named parameter and &quot;toJS&quot; helper function, you can query complex objects or pass JSON-object parameter to a SQL function.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--elemMatch, named parameter and Arithmetic operators</span></span><br><span class="line"><span class="comment">--cool stuff,  (score&gt;8, score&lt;=10) will be translated as  &#123;&quot;score&quot;: &#123; &quot;$gt&quot;: 8, &quot;$lte&quot;: 10 &#125;&#125;</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> results <span class="operator">=</span>elemMatch(item<span class="operator">=</span><span class="string">&#x27;abc&#x27;</span>, score<span class="operator">&gt;</span><span class="number">8</span>, score<span class="operator">&lt;=</span><span class="number">10</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--date timezone, named parameter</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="keyword">year</span>(<span class="type">date</span><span class="operator">=</span>&quot;date&quot;, timezone<span class="operator">=</span><span class="string">&#x27;America/Chicago&#x27;</span>) <span class="keyword">as</span> <span class="keyword">year</span> <span class="keyword">FROM</span> sales</span><br><span class="line"></span><br><span class="line"><span class="comment">--query object type value, object_field: &#123; a : 1, b : &#123;b1 : 2,b2 : &quot;b2&quot;&#125;</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> object_field <span class="operator">=</span> toJS(a<span class="operator">=</span><span class="number">1</span>, b<span class="operator">=</span>toJS(b1<span class="operator">=</span><span class="number">2</span>, b2<span class="operator">=</span><span class="string">&#x27;b2&#x27;</span>))</span><br><span class="line"></span><br><span class="line"><span class="comment">-- text search with full text search options</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> article <span class="keyword">WHERE</span> </span><br><span class="line">   $text <span class="operator">=</span> toJS($<span class="keyword">search</span><span class="operator">=</span><span class="string">&#x27;cake&#x27;</span>,  $<span class="keyword">language</span><span class="operator">=</span><span class="string">&#x27;en&#x27;</span>, $caseSensitive<span class="operator">=</span><span class="literal">false</span>, $diacriticSensitive<span class="operator">=</span><span class="literal">false</span>) </span><br><span class="line"></span><br><span class="line"><span class="keyword">SELECT</span> literal(toJS(k<span class="operator">&gt;</span><span class="number">5</span>, k<span class="operator">&lt;=</span><span class="number">10</span>))  <span class="keyword">FROM</span> collection</span><br><span class="line"></span><br></pre></td></tr></table></figure><span id="more"></span><h2><span id="mixed-use-of-sql-and-chainable-aggregation-pipeline">Mixed use of SQL and Chainable Aggregation Pipeline</span></h2><p>This feature already existed in previous versions, but in 4.5, mb.runSQLQuery returns AggregateCursor instead of DBCursor. This allows NoSQLBooster Intellisense to know all AggregateCursor&#39;s chainable stage methods. (sort, limit, match, project, unwind...)</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">       SELECT * FROM &quot;survey&quot; where type=&#x27;ABC&#x27; and year(date) = 2018 ORDER BY &quot;results.score&quot; DESC</span></span><br><span class="line"><span class="string">       </span></span><br><span class="line"><span class="string">`</span>)</span><br><span class="line">.<span class="title function_">unwind</span>(<span class="string">&#x27;$tags&#x27;</span>)</span><br><span class="line">.<span class="title function_">project</span>(<span class="string">&quot;-_id&quot;</span>) <span class="comment">//alias select</span></span><br><span class="line">.<span class="title function_">limit</span>(<span class="number">1000</span>)</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Query is a bit longer.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">aggregate</span>(</span><br><span class="line">[</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$addFields&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;year(date)&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;$year&quot;</span> : <span class="string">&quot;$date&quot;</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$match&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;type&quot;</span> : <span class="string">&quot;ABC&quot;</span>,</span><br><span class="line"><span class="string">&quot;year(date)&quot;</span> : <span class="number">2018</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$project&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;year(date)&quot;</span> : <span class="number">0</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$sort&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;results.score&quot;</span> : -<span class="number">1</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$unwind&quot;</span> : <span class="string">&quot;$tags&quot;</span></span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$project&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : <span class="number">0</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;,</span><br><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;$limit&quot;</span> : <span class="number">1000</span></span><br><span class="line">&#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><h2><span id="querying-special-bson-data-types-uuid-bindata-dbref">Querying Special BSON Data Types, UUID, BinData, DBRef...</span></h2><p>NoSQLBooster 4.5 supports all MongoDB build-in Data Types functions. To query values of these special BSON Data types, just write the values as you would in the MongoDB shell. </p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--date</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> date_field <span class="operator">&gt;=</span> <span class="type">date</span>(&quot;2018-02-09T00:00:00+08:00&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> date_field <span class="operator">&gt;=</span> ISODate(&quot;2018-02-09&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--number</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> int64_field <span class="operator">&gt;=</span> NumberLong(&quot;3223123123122132992&quot;) </span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> decimal_field <span class="operator">=</span> NumberDecimal(&quot;8989922322323232.12&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--Regular Expression</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> string_field <span class="operator">=</span> RegExp(<span class="string">&#x27;query&#x27;</span>,<span class="string">&#x27;i&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--binary</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> objectId_field <span class="operator">=</span> ObjectId(&quot;56034dae9b835b3ee6a52cb7&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> binary_field <span class="operator">=</span> BinData(<span class="number">0</span>,&quot;X96v3g==&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> md5_field <span class="operator">=</span> MD5(&quot;f65485ac0686409aabfa006f0c771fbb&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> hex_field <span class="operator">=</span> HexData(<span class="number">0</span>,&quot;00112233445566778899aabbccddeeff&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--uuid</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> uuid_field <span class="operator">=</span> UUID(&quot;4ae5bfce-1dba-4776-80eb-17678822b94e&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> LUUID(&quot;8c425c91-6a72-c25c-1c9d-3cfe237e7c92&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> JSUUID(&quot;8c425c91-6a72-c25c-1c9d-3cfe237e7c92&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> CSUUID(&quot;6a72c25c-5c91-8c42-927c-7e23fe3c9d1c&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> PYUUID(&quot;5cc2726a-915c-428c-927c-7e23fe3c9d1c&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--timstamp</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> timestamp_field <span class="operator">=</span> <span class="type">Timestamp</span>(<span class="number">1443057070</span>, <span class="number">1</span>)</span><br><span class="line"><span class="comment">--symbol</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> symbol_field <span class="operator">=</span> Symbol(<span class="string">&#x27;I am a symbol&#x27;</span>)</span><br><span class="line"><span class="comment">--dbref</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> dbref_field <span class="operator">=</span> DBRef(&quot;unicorns&quot;, ObjectId(&quot;55f23233edad44cb25b0d51a&quot;))</span><br><span class="line"><span class="comment">--minkey maxkey</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> minkey_field <span class="operator">=</span> MinKey <span class="keyword">and</span> maxkey_field <span class="operator">=</span> MaxKey</span><br><span class="line"></span><br><span class="line"><span class="comment">--array, array_field is [1, 2, &#x27;3&#x27;]</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> array_field <span class="operator">=</span> [<span class="number">1</span>,<span class="number">2</span>,<span class="string">&#x27;3&#x27;</span>]</span><br><span class="line"></span><br><span class="line"><span class="comment">--object, object_field is &#123; a : 1, b : &#123;b1 : 2,b2 : &quot;b2&quot;&#125;</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> object_field <span class="operator">=</span> toJS(a<span class="operator">=</span><span class="number">1</span>, b<span class="operator">=</span>toJS(b1<span class="operator">=</span><span class="number">2</span>, b2<span class="operator">=</span><span class="string">&#x27;b2&#x27;</span>))</span><br><span class="line"></span><br></pre></td></tr></table></figure><!-- more --><h2><span id="date-functions-with-optional-timezone">Date Functions with Optional Timezone</span></h2><p>NoSQLBooster 4.5 adds the timezone support for all SQL Date functions(Aggregation Operators), this feature requires MongoDB 3.6 or later.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span>  <span class="type">date</span>,</span><br><span class="line"></span><br><span class="line">        <span class="keyword">year</span>(&quot;date&quot;, <span class="string">&#x27;America/Chicago&#x27;</span>) <span class="keyword">as</span> <span class="keyword">year</span>, <span class="comment">--Olson Timezone Identifier</span></span><br><span class="line">        <span class="keyword">month</span>(<span class="type">date</span><span class="operator">=</span>&quot;date&quot;, timezone<span class="operator">=</span><span class="string">&#x27;America/Chicago&#x27;</span>) <span class="keyword">as</span> <span class="keyword">month</span>, <span class="comment">-- named parameters</span></span><br><span class="line">        dayOfMonth(&quot;date&quot;, <span class="string">&#x27;-04:35&#x27;</span>) <span class="keyword">as</span> <span class="keyword">day</span>, <span class="comment">--UTC Offset </span></span><br><span class="line">        <span class="keyword">hour</span>(&quot;date&quot;,<span class="string">&#x27;+0800&#x27;</span>) <span class="keyword">as</span> <span class="keyword">hour</span>,</span><br><span class="line">        <span class="keyword">minute</span>(&quot;date&quot;,<span class="string">&#x27;+03&#x27;</span>) <span class="keyword">as</span> minutes,</span><br><span class="line">        <span class="keyword">second</span>(<span class="type">date</span>, <span class="string">&#x27;GMT&#x27;</span>) <span class="keyword">as</span> seconds, </span><br><span class="line">        millisecond(<span class="string">&#x27;$date&#x27;</span>,<span class="string">&#x27;+08&#x27;</span>) <span class="keyword">as</span> millisecond,  <span class="comment">-- single quote string, use $ as prefix</span></span><br><span class="line">        dayOfYear(&quot;date&quot;,<span class="string">&#x27;Europe/London&#x27;</span>) <span class="keyword">as</span> dayOfYear,</span><br><span class="line">        dayOfWeek(<span class="type">date</span>) <span class="keyword">as</span> dayOfWeek,</span><br><span class="line">        week(&quot;date&quot;) <span class="keyword">as</span> week,</span><br><span class="line"></span><br><span class="line">        dateToString(format<span class="operator">=</span><span class="string">&#x27;%H:%M:%S:%L%z&#x27;</span>, <span class="type">date</span><span class="operator">=</span><span class="type">date</span>, timezone<span class="operator">=</span><span class="string">&#x27;America/New_York&#x27;</span>) <span class="keyword">as</span> timewithOffsetNY, </span><br><span class="line">        dateToString(format<span class="operator">=</span><span class="string">&#x27;%Z&#x27;</span>, <span class="type">date</span><span class="operator">=</span>&quot;date&quot;, timezone<span class="operator">=</span><span class="string">&#x27;+04:30&#x27;</span>) <span class="keyword">as</span> minutesOffset430,</span><br><span class="line"></span><br><span class="line">        dateToParts(<span class="type">date</span><span class="operator">=</span>&quot;date&quot;, iso8601<span class="operator">=</span><span class="literal">true</span>) <span class="keyword">as</span> date_iso,</span><br><span class="line">        dateToParts(<span class="type">date</span><span class="operator">=</span>&quot;date&quot;, timezone<span class="operator">=</span><span class="string">&#x27;America/New_York&#x27;</span>) <span class="keyword">as</span> date_timezone,</span><br><span class="line"></span><br><span class="line">        dateFromParts(<span class="keyword">year</span><span class="operator">=</span><span class="number">2016</span>, <span class="keyword">month</span><span class="operator">=</span><span class="number">12</span>, <span class="keyword">day</span><span class="operator">=</span><span class="number">31</span>, <span class="keyword">hour</span><span class="operator">=</span><span class="number">23</span>, <span class="keyword">minute</span><span class="operator">=</span><span class="number">46</span>, <span class="keyword">second</span><span class="operator">=</span><span class="number">12</span>, timezone<span class="operator">=</span><span class="string">&#x27;America/New_York&#x27;</span>) <span class="keyword">as</span> date_timezone</span><br><span class="line"><span class="keyword">FROM</span> sales</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="improved-group-by-clause">Improved GROUP BY Clause</span></h2><p>The improved GROUP By clause supports MongoDB Pipeline Operators and SQL Aliases.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string">   SELECT count(*), year FROM employees</span></span><br><span class="line"><span class="string">          GROUP BY year(hire_date,&#x27;+08:00&#x27;)  as year  -- year function is MongoDB $year operator      </span></span><br><span class="line"><span class="string">`</span>)</span><br></pre></td></tr></table></figure><p>The following is equivalent MongoDB Aggregation Pipelines.  Compare these two statements, it is clear that the SQL SELECT is simpler and easier to write and read than the MongoDB JSON-LIKE aggregation pipelines.</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">aggregate</span>(</span><br><span class="line">  [&#123;</span><br><span class="line">      <span class="string">&quot;$group&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;_id&quot;</span>: &#123;</span><br><span class="line">          <span class="string">&quot;year&quot;</span>: &#123;</span><br><span class="line">            <span class="string">&quot;$year&quot;</span>: &#123;</span><br><span class="line">              <span class="string">&quot;date&quot;</span>: <span class="string">&quot;$hire_date&quot;</span>,</span><br><span class="line">              <span class="string">&quot;timezone&quot;</span>: <span class="string">&quot;+08:00&quot;</span></span><br><span class="line">            &#125;</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;,</span><br><span class="line">        <span class="string">&quot;COUNT(*)&quot;</span>: &#123;</span><br><span class="line">          <span class="string">&quot;$sum&quot;</span>: <span class="title class_">NumberInt</span>(<span class="string">&quot;1&quot;</span>)</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="string">&quot;$project&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;COUNT(*)&quot;</span>: <span class="string">&quot;$COUNT(*)&quot;</span>,</span><br><span class="line">        <span class="string">&quot;year&quot;</span>: <span class="string">&quot;$_id.year&quot;</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  ])</span><br></pre></td></tr></table></figure><h2><span id="better-error-handling-in-sql-query">Better Error Handling in SQL Query</span></h2><p>All exceptions thrown when running a SQL Query have associated location information.</p><p><img src="/blog/img/sql-error-report.png" alt="SQL Error Report"></p><h2><span id="sql-editor-mouse-hover">SQL Editor Mouse Hover</span></h2><p>The mouse hover will show many useful information, such as document and example. </p><p><img src="/blog/img/sql-token-tooltip.png" alt="SQL Token Tooltip"></p><p><i class="fa fa-lightbulb"></i>Press F1 will lead you to MongoDB online document as the cursor is over a valid MongoDB function or aggregation operator.</p><h2><span id="lots-of-new-sql-snippets">Lots of New SQL Snippets</span></h2><p>NoSQLBooster 4.5 includes a lot of SQL-specific code snippets to save you time, Date Range, Text Search, Query and Array, Existence Check, Type Check and so on. You can always manually trigger it with Ctrl-Shift-Space. Out of the box, Ctrl-Space, Alt-Space are acceptable triggers.</p><p><img src="/blog/img/sql-snippet-daterange.gif" alt="SQL Snippet"></p><h3><span id="sql-date-range-snippets">SQL Date Range Snippets</span></h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;daterange [Tab]&quot;, then...  , today, yesterday, lastNDays</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span></span><br><span class="line">  &quot;|&quot; <span class="operator">&gt;=</span> <span class="type">date</span>(&quot;2018-02-09T00:00:00+08:00&quot;) <span class="keyword">and</span> &quot;|&quot; <span class="operator">&lt;</span> <span class="type">date</span>(&quot;2018-02-10T00:00:00+08:00&quot;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3><span id="text-search-snippets">Text Search Snippets</span></h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;text [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> $text <span class="operator">=</span> toJS($<span class="keyword">search</span><span class="operator">=</span><span class="string">&#x27;|&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;textopt [Tab]&quot;, then...</span></span><br><span class="line"><span class="comment">--  with full text search options</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> </span><br><span class="line">   $text <span class="operator">=</span> toJS($<span class="keyword">search</span><span class="operator">=</span><span class="string">&#x27;|&#x27;</span>,  $<span class="keyword">language</span><span class="operator">=</span><span class="string">&#x27;en&#x27;</span>, $caseSensitive<span class="operator">=</span><span class="literal">false</span>, $diacriticSensitive<span class="operator">=</span><span class="literal">false</span>) </span><br><span class="line"></span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Text Search</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">collection</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;$text&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;$search&quot;</span>: <span class="string">&quot;|&quot;</span>,</span><br><span class="line">    <span class="string">&quot;$language&quot;</span>: <span class="string">&quot;en&quot;</span>,</span><br><span class="line">    <span class="string">&quot;$caseSensitive&quot;</span>: <span class="literal">false</span>,</span><br><span class="line">    <span class="string">&quot;$diacriticSensitive&quot;</span>: <span class="literal">false</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3><span id="query-an-array-all-and-elemmatch-snippets">Query an Array ($all and $elemMatch) Snippets</span></h3><p>The $elemMatch operator matches documents that contain an array field with at least one element that matches all the specified query criteria.</p><ul><li>Element Match with Embedded Documents</li></ul><p><i class="fa fa-lightbulb"></i> The elemMatch query criteria <em><strong>(quantity&gt;2, quantity&lt;&#x3D;10)</strong></em> will be translated as *** &quot;quantity&quot;: { &quot;$gt&quot;: 2, &quot;$lte&quot;: 10 }***. This syntax is more concise and expressive.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;elemem [Tab]&quot;, then...</span></span><br><span class="line"><span class="comment">--  </span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span>elemMatch(product<span class="operator">=</span><span class="string">&#x27;abc&#x27;</span>, quantity<span class="operator">&gt;</span><span class="number">2</span>, quantity<span class="operator">&lt;=</span><span class="number">10</span>)</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Query</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;|&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;$elemMatch&quot;</span>: &#123;</span><br><span class="line">      <span class="string">&quot;product&quot;</span>: <span class="string">&quot;abc&quot;</span>,</span><br><span class="line">      <span class="string">&quot;quantity&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$gt&quot;</span>: <span class="number">2</span>,</span><br><span class="line">        <span class="string">&quot;$lte&quot;</span>: <span class="number">10</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><ul><li>Element Match</li></ul><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;elem [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;score&quot; <span class="operator">=</span>elemMatch($gte<span class="operator">=</span><span class="number">80</span>, $lte<span class="operator">=</span><span class="number">85</span>)</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Query</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;score&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;$elemMatch&quot;</span>: &#123;</span><br><span class="line">      <span class="string">&quot;$gte&quot;</span>: <span class="number">80</span>,</span><br><span class="line">      <span class="string">&quot;$lte&quot;</span>: <span class="number">85</span></span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>The $all array operator selects the documents where the value of a field is an array that contains all the specified elements.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;all [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> toJS($<span class="keyword">all</span><span class="operator">=</span>[<span class="string">&#x27;&#x27;</span>, <span class="string">&#x27;&#x27;</span>])</span><br></pre></td></tr></table></figure><h3><span id="existence-check-and-type-check-snippets">Existence Check and Type Check Snippets</span></h3><ul><li>Existence Check ($exists)</li></ul><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;exists [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span>$<span class="keyword">exists</span>(<span class="literal">TRUE</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;nonExist [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> $<span class="keyword">exists</span>(<span class="literal">FALSE</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;existAndIsNull [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> $<span class="keyword">exists</span>(<span class="literal">TRUE</span>) <span class="keyword">and</span> &quot;|&quot; <span class="keyword">IS</span> <span class="keyword">NULL</span></span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;existAndIsNotNull [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> $<span class="keyword">exists</span>(<span class="literal">TRUE</span>) <span class="keyword">and</span> &quot;|&quot; <span class="keyword">IS</span> <span class="keyword">NOT NULL</span></span><br></pre></td></tr></table></figure><ul><li>Querying by Multiple Data Type ($type)</li></ul><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;typeSearch [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> toJS($type<span class="operator">=</span>[<span class="string">&#x27;double&#x27;</span>,<span class="string">&#x27;int&#x27;</span>,<span class="string">&#x27;string&#x27;</span>,<span class="string">&#x27;bool&#x27;</span>,<span class="string">&#x27;date&#x27;</span>,<span class="string">&#x27;object&#x27;</span>,<span class="string">&#x27;array&#x27;</span>,<span class="string">&#x27;null&#x27;</span>])</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1><span id="other-notable-improvements">Other Notable Improvements</span></h1><h2><span id="improved-tooltip-of-index-node">Improved tooltip of Index Node</span></h2><p>Statistics on the index use will be displayed in the tooltip of index node. </p><p><img src="/blog/img/tooltip-index.png" alt="Index Tooltip"></p><h2><span id="auto-detect-mongodb-uri">Auto-Detect MongoDB URI</span></h2><p>Starting with version 4.5, NoSQLBooster can detect whether you have a MongoDB URI in your clipboard and auto-populate the connection dialog from the URI. </p><p><img src="/blog/img/mongouri-detect.png" alt="Detect MongoDB URI"></p><h2><span id="show-the-recent-access-time-of-the-connection">Show the Recent Access Time of the Connection</span></h2><p><img src="/blog/img/uri-recent-access-time.png" alt="Recent Access Time"></p><h1><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h1><ul><li>Improved, Humanize Array values in the table view, show as &quot;(3) [1, 2.0 ,&#39;3&#39;]&quot;</li><li>Changed, the default sample size of schema analysis  increases from 100 to 1000</li><li>Changed, default database name of test data generator dialog from &quot;test&quot; to the current db</li><li>Added, &quot;View Index Statistics ($indexStats)&quot; menu item to indexes sub items of the collection node</li><li>Upgraded from Chrome 58.0.3029.110 to 59.0.3071.115</li><li>Upgraded from Node 7.9.0 to 8.2.1</li><li><em><strong>Enabled SSL connection in free edition</strong></em></li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL-Query/">SQL Query</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-45/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoDB 3.6 Change Stream Example with NoSQLBooster</title>
      <link>https://www.nosqlbooster.com/blog/mongodb36-change-stream-example-with-nosqlbooster/</link>
      <guid>https://www.nosqlbooster.com/blog/mongodb36-change-stream-example-with-nosqlbooster/</guid>
      <pubDate>Mon, 15 Jan 2018 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;&lt;small&gt;By &lt;a href=&quot;qinghai@nosqlbooster.com&quot;&gt;Qinghai&lt;/a&gt; | January 15, 2018&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;MongoDB 3.6 have a new change notification API, called a “change stream.”  Change streams allow applications to access real-time data changes without the complexity and risk of tailing the oplog. Applications can use change streams to subscribe to all data changes on a collection and immediately react to them. &lt;/p&gt;
&lt;p&gt;This post is a step by step tutorial on how to open and configure change streams with NoSQLBooster.&lt;/p&gt;
&lt;p&gt;Change streams are available for replica sets or sharded clusters with replica set shards. You cannot open a change stream against a standalone mongod. The example below assume that you have connected to a MongoDB 3.6 replica set and have accessed a database. If you want to deploy a replica set in a development or test environment, please refer to &lt;a href=&quot;https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-testing/&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;Prepare-Demo-Data&quot;&gt;&lt;a href=&quot;#Prepare-Demo-Data&quot; class=&quot;headerlink&quot; title=&quot;Prepare Demo Data&quot;&gt;&lt;/a&gt;Prepare Demo Data&lt;/h1&gt;&lt;p&gt;Insert the following demo data to MongoDB. Open a shell tab Ctrl-T and execute the following script to get the unicorns collection.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;use test&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;unicorns&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insert&lt;/span&gt;([&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;	&lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;string&quot;&gt;&amp;quot;Horny&amp;quot;&lt;/span&gt;,	&lt;span class=&quot;string&quot;&gt;&amp;quot;weight&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;600&lt;/span&gt; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;	&lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;string&quot;&gt;&amp;quot;Aurora&amp;quot;&lt;/span&gt;,	&lt;span class=&quot;string&quot;&gt;&amp;quot;weight&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;450&lt;/span&gt;&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;	&lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;string&quot;&gt;&amp;quot;Unicrom&amp;quot;&lt;/span&gt;,	&lt;span class=&quot;string&quot;&gt;&amp;quot;weight&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;984&lt;/span&gt;&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;	&lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;string&quot;&gt;&amp;quot;Roooooodles&amp;quot;&lt;/span&gt;,	&lt;span class=&quot;string&quot;&gt;&amp;quot;weight&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;590&lt;/span&gt;&amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;	&lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;string&quot;&gt;&amp;quot;Solnara&amp;quot;&lt;/span&gt;,	&lt;span class=&quot;string&quot;&gt;&amp;quot;weight&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;550&lt;/span&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;])&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h1 id=&quot;Setup-Watch-on-Collection&quot;&gt;&lt;a href=&quot;#Setup-Watch-on-Collection&quot; class=&quot;headerlink&quot; title=&quot;Setup Watch on Collection&quot;&gt;&lt;/a&gt;Setup Watch on Collection&lt;/h1&gt;&lt;p&gt;Here is the most important part. Let&amp;#39;s setup watch on collection, so that we can listen for any changes in the operation that occur in the collection, such as insert, delete, replace, update, invalidate and so on. &lt;/p&gt;
&lt;p&gt;Right-click the collection node in the connection tree and select &amp;quot;Watch Collection&amp;quot; item like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/connect-tree-watch.png&quot; alt=&quot;Watch Collection Menu Item&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p><small>By <a href="qinghai@nosqlbooster.com">Qinghai</a> | January 15, 2018</small></p><p>MongoDB 3.6 have a new change notification API, called a “change stream.”  Change streams allow applications to access real-time data changes without the complexity and risk of tailing the oplog. Applications can use change streams to subscribe to all data changes on a collection and immediately react to them. </p><p>This post is a step by step tutorial on how to open and configure change streams with NoSQLBooster.</p><p>Change streams are available for replica sets or sharded clusters with replica set shards. You cannot open a change stream against a standalone mongod. The example below assume that you have connected to a MongoDB 3.6 replica set and have accessed a database. If you want to deploy a replica set in a development or test environment, please refer to <a href="https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-testing/">this link</a>.</p><hr><h1><span id="prepare-demo-data">Prepare Demo Data</span></h1><p>Insert the following demo data to MongoDB. Open a shell tab Ctrl-T and execute the following script to get the unicorns collection.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">use test</span><br><span class="line"></span><br><span class="line">db.<span class="property">unicorns</span>.<span class="title function_">insert</span>([</span><br><span class="line">    &#123;<span class="string">&quot;name&quot;</span> : <span class="string">&quot;Horny&quot;</span>,<span class="string">&quot;weight&quot;</span> : <span class="number">600</span> &#125;,</span><br><span class="line">    &#123;<span class="string">&quot;name&quot;</span> : <span class="string">&quot;Aurora&quot;</span>,<span class="string">&quot;weight&quot;</span> : <span class="number">450</span>&#125;,</span><br><span class="line">    &#123;<span class="string">&quot;name&quot;</span> : <span class="string">&quot;Unicrom&quot;</span>,<span class="string">&quot;weight&quot;</span> : <span class="number">984</span>&#125;,</span><br><span class="line">    &#123;<span class="string">&quot;name&quot;</span> : <span class="string">&quot;Roooooodles&quot;</span>,<span class="string">&quot;weight&quot;</span> : <span class="number">590</span>&#125;,</span><br><span class="line">    &#123;<span class="string">&quot;name&quot;</span> : <span class="string">&quot;Solnara&quot;</span>,<span class="string">&quot;weight&quot;</span> : <span class="number">550</span>&#125;</span><br><span class="line">])</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1><span id="setup-watch-on-collection">Setup Watch on Collection</span></h1><p>Here is the most important part. Let&#39;s setup watch on collection, so that we can listen for any changes in the operation that occur in the collection, such as insert, delete, replace, update, invalidate and so on. </p><p>Right-click the collection node in the connection tree and select &quot;Watch Collection&quot; item like this:</p><p><img src="/blog/img/connect-tree-watch.png" alt="Watch Collection Menu Item"></p><span id="more"></span> <p>NoSQLBooster also provides a code snippet for watching collection.  Open a shell tab Ctrl-T and enter &quot;db.unicorn.wa&quot; like this, select &quot;watch&quot; snippet (not method) in the auto-complete list.</p><p><img src="/blog/img/watch-collection-snippet.png" alt="Watch Collection Code Snippet"></p><p>NoSQLBooster will generate code and run it immediately. Let&#39;s press Command+F2 to stop it and explore the generated code.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">unicorns</span>.<span class="title function_">watch</span>([&#123;</span><br><span class="line">      <span class="attr">$match</span>: &#123;</span><br><span class="line">          <span class="attr">operationType</span>: <span class="string">&quot;update&quot;</span>, <span class="comment">//update|insert|delete|replace|update|invalidate</span></span><br><span class="line">      &#125;</span><br><span class="line">      &#125;],</span><br><span class="line">      &#123;</span><br><span class="line">          <span class="attr">fullDocument</span>: <span class="string">&quot;updateLookup&quot;</span>, <span class="comment">//default|updateLookup</span></span><br><span class="line">      &#125;)</span><br><span class="line">      .<span class="title function_">on</span>(<span class="string">&quot;change&quot;</span>, <span class="function">(<span class="params">data</span>) =&gt;</span> &#123;</span><br><span class="line">          <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">tojson</span>(data))</span><br><span class="line">      &#125;);</span><br><span class="line">  </span><br><span class="line"><span class="keyword">while</span> (<span class="literal">true</span>) &#123; <span class="comment">//</span></span><br><span class="line">   <span class="title function_">sleep</span>(<span class="number">1000</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>In the example above, we subscribed to change stream events &quot;change&quot; as asynchronous events. </p><p>The pipeline list includes a single $match stage that filters any operations where the operationType is update, if you want listen any operations, please comment this line. </p><p>And, the fullDocument option is set to &quot;updateLookup&quot;, that means all update operations notifications include a fullDocument field that represents the current version of the document affected by the update operation. The other option is default which indicates you don’t need any extra data. Omitting the fullDocument option is equivalent to specifying the value default.</p><p>OK, Let&#39;s presss &quot;Command+Enter&quot; or &quot;F5&quot; to run the code.</p><h1><span id="simulate-data-update">Simulate Data Update</span></h1><p>Let&#39;s update some records.  Open a shell tab Ctrl-T and execute the following script to regularly update some data randomly.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">    db.<span class="property">unicorns</span>.<span class="title function_">find</span>(&#123;&#125;).<span class="title function_">forEach</span>(<span class="function">(<span class="params">it</span>)=&gt;</span>&#123;</span><br><span class="line">        db.<span class="property">unicorns</span>.<span class="title function_">update</span>(&#123;<span class="attr">_id</span>:it.<span class="property">_id</span>&#125;,&#123;<span class="attr">$set</span>:&#123;<span class="attr">weight</span>: _.<span class="title function_">random</span>(<span class="number">500</span>,<span class="number">1000</span>)&#125;&#125;)           </span><br><span class="line">          </span><br><span class="line">        <span class="title function_">sleep</span>(<span class="number">1000</span>);</span><br><span class="line">    &#125;)    </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Run it and back to &quot;watch collection&quot; tab. Now you should see, as time passes, every record will get updated into Unicorn collection and we will get every update happening on our screen.</p><p><img src="/blog/img/watch-collection-result.gif" alt="Watch Collection"></p><p>Here is an example of the output of the result.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;_data&quot;</span> : <span class="title class_">BinData</span>(<span class="number">0</span>,<span class="string">&quot;glpcHXoAAAABRmRfaWQAZFpcClATiDecpJhQLwBaEAQNyDr9S2FNdpXxKqqHY5WcBA==&quot;</span>)</span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;operationType&quot;</span> : <span class="string">&quot;update&quot;</span>,</span><br><span class="line"><span class="string">&quot;fullDocument&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : <span class="title class_">ObjectId</span>(<span class="string">&quot;5a5c0a501388379ca498502f&quot;</span>),</span><br><span class="line"><span class="string">&quot;name&quot;</span> : <span class="string">&quot;Solnara&quot;</span>,</span><br><span class="line"><span class="string">&quot;weight&quot;</span> : <span class="number">751</span></span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;ns&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;db&quot;</span> : <span class="string">&quot;test&quot;</span>,</span><br><span class="line"><span class="string">&quot;coll&quot;</span> : <span class="string">&quot;unicorns&quot;</span></span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;documentKey&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;_id&quot;</span> : <span class="title class_">ObjectId</span>(<span class="string">&quot;5a5c0a501388379ca498502f&quot;</span>)</span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;updateDescription&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;updatedFields&quot;</span> : &#123;</span><br><span class="line"><span class="string">&quot;weight&quot;</span> : <span class="number">751</span></span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;removedFields&quot;</span> : [ ]</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB3-6/">MongoDB3.6</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Change-Stream/">Change Stream</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/mongodb36-change-stream-example-with-nosqlbooster/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster for MongoDB 4.3 Released! official support for MongoDB 3.6</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-43/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-43/</guid>
      <pubDate>Wed, 03 Jan 2018 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release NoSQLBooster for MongoDB 4.3 today. This version includes official support for MongoDB 3.6 along with some useful minor improvements and bugfix. For more information on MongoDB 3.6 , see &lt;a href=&quot;https://docs.mongodb.com/manual/release-notes/3.6/&quot;&gt;Release Notes for MongoDB 3.6&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;MongoDB-3-6-support&quot;&gt;&lt;a href=&quot;#MongoDB-3-6-support&quot; class=&quot;headerlink&quot; title=&quot;MongoDB 3.6 support&quot;&gt;&lt;/a&gt;MongoDB 3.6 support&lt;/h1&gt;&lt;p&gt;NoSQLBooster for MongoDB 4.3 upgrades dependent MongoDB Node.js driver to 3.0, adds support for all the new shell methods and operations of MongoDB 3.6. DNS-constructed Seedlist mongodb+srv, Change Streams, Sessions, JSON Schema , New Query Operators and New Aggregation Stages and Operators.&lt;/p&gt;
&lt;p&gt;WARNING: MongoDB 2.4 reached end of life in March of 2016, MongoDB Node.js 3.x driver dropped support for MongoDB 2.4 or below. Beginning in NoSQLBooster for MongoDB 4.3, versions of MongoDB server prior to version 2.6 are no longer supported.&lt;/p&gt;
&lt;h2 id=&quot;DNS-constructed-Seedlist-mongodb-srv&quot;&gt;&lt;a href=&quot;#DNS-constructed-Seedlist-mongodb-srv&quot; class=&quot;headerlink&quot; title=&quot;DNS-constructed Seedlist mongodb+srv&quot;&gt;&lt;/a&gt;DNS-constructed Seedlist mongodb+srv&lt;/h2&gt;&lt;p&gt;In addition to the standard connection format, NoSQLBooster for MongoDB 4.3 quick connect (connect from URI...) support a DNS-constructed seedlist. &lt;/p&gt;
&lt;p&gt;To use it, Click Menu -&amp;gt; File -&amp;gt; Quick Connect ... (Enter mongodb+srv:&amp;#x2F;&amp;#x2F;) or Click Connect -&amp;gt; From URI .. in the main toolbar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/mongodb-srv.png&quot; alt=&quot;DNS-constructed Seedlist mongodb+srv&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Change-Streams-db-collection-watch&quot;&gt;&lt;a href=&quot;#Change-Streams-db-collection-watch&quot; class=&quot;headerlink&quot; title=&quot;Change Streams (db.collection.watch)&quot;&gt;&lt;/a&gt;Change Streams (db.collection.watch)&lt;/h2&gt;&lt;p&gt;NoSQLBooster for MongoDB 4.3 adds shell method and code snippet &amp;quot;db.collection.watch&amp;quot; to open and watch a change stream.&lt;/p&gt;
&lt;p&gt;To use it &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Method1: Enter &amp;quot;db.collection.watch&amp;quot;, pop-up code complete dialog (Ctrl-Shift-Space), select &amp;quot;watch&amp;quot; snippet.&lt;/li&gt;
&lt;li&gt;Method2: Right-click collection node in the connection tree, and click -&amp;gt; Watch Collection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/watch_collection.gif&quot; alt=&quot;db.collection.watch&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release NoSQLBooster for MongoDB 4.3 today. This version includes official support for MongoDB 3.6 along with some useful minor improvements and bugfix. For more information on MongoDB 3.6 , see <a href="https://docs.mongodb.com/manual/release-notes/3.6/">Release Notes for MongoDB 3.6</a>.</p><h1><span id="mongodb-36-support">MongoDB 3.6 support</span></h1><p>NoSQLBooster for MongoDB 4.3 upgrades dependent MongoDB Node.js driver to 3.0, adds support for all the new shell methods and operations of MongoDB 3.6. DNS-constructed Seedlist mongodb+srv, Change Streams, Sessions, JSON Schema , New Query Operators and New Aggregation Stages and Operators.</p><p>WARNING: MongoDB 2.4 reached end of life in March of 2016, MongoDB Node.js 3.x driver dropped support for MongoDB 2.4 or below. Beginning in NoSQLBooster for MongoDB 4.3, versions of MongoDB server prior to version 2.6 are no longer supported.</p><h2><span id="dns-constructed-seedlist-mongodbsrv">DNS-constructed Seedlist mongodb+srv</span></h2><p>In addition to the standard connection format, NoSQLBooster for MongoDB 4.3 quick connect (connect from URI...) support a DNS-constructed seedlist. </p><p>To use it, Click Menu -&gt; File -&gt; Quick Connect ... (Enter mongodb+srv:&#x2F;&#x2F;) or Click Connect -&gt; From URI .. in the main toolbar.</p><p><img src="/blog/img/mongodb-srv.png" alt="DNS-constructed Seedlist mongodb+srv"></p><h2><span id="change-streams-dbcollectionwatch">Change Streams (db.collection.watch)</span></h2><p>NoSQLBooster for MongoDB 4.3 adds shell method and code snippet &quot;db.collection.watch&quot; to open and watch a change stream.</p><p>To use it </p><ul><li>Method1: Enter &quot;db.collection.watch&quot;, pop-up code complete dialog (Ctrl-Shift-Space), select &quot;watch&quot; snippet.</li><li>Method2: Right-click collection node in the connection tree, and click -&gt; Watch Collection.</li></ul><p><img src="/blog/img/watch_collection.gif" alt="db.collection.watch"></p><span id="more"></span> <h2><span id="sessions">Sessions</span></h2><p>NoSQLBooster for MongoDB 4.3 adds all session related methods to its embeded Mongo Shell. It also provides a few code snippets to manage sessions.</p><p><img src="/blog/img/list-session-snippets.png" alt="Sessions"></p><h2><span id="new-query-operators">New Query Operators</span></h2><p>NoSQLBooster for MongoDB 4.3 adds the following new query operators and code snippets:</p><ul><li>The new $jsonSchema operator matches documents that validate against the given JSON Schema. </li><li>The $expr allows the use of aggregation expressions within the query language.</li></ul><h2><span id="new-aggregation-stages-and-operators">New Aggregation Stages and Operators</span></h2><p>NoSQLBooster for MongoDB 4.3 adds &quot;db.aggregate(), to perform aggregations that do not rely on an underlying collection, adds the new MongoDB 3.6 aggregation pipeline stages and new Aggregation Operators.</p><h1><span id="new-nodejs-3x-driver-query-code-generator">New Node.js 3.x Driver Query Code Generator</span></h1><p>In addition to Node.js 2.x driver, Java , Python, C# and the mongo shell language, you can also now generate Node.js 3.x driver API code from all queries find, aggregate and SQL Query.</p><h1><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h1><ul><li>Improved, Humanize numbers, show 4918360.53 as &quot;4,918,360.53 (4.9M)&quot;</li><li>Fixed, High memory usage crashs machine on Linux</li><li>Fixed, Cut&#x2F;Copy&#x2F;Paste in editor context menu doesn&#39;t work on Mac</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Aggregation/">Aggregation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB3-6/">MongoDB3.6</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Operator/">Query Operator</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Collection/">Collection</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Change-Stream/">Change Stream</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Code-Generator/">Query Code Generator</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-43/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>NoSQLBooster for MongoDB (formerly MongoBooster) 4.2 Released! Convert MongoDB queries to Nodejs, Java, C#, Python and MongoShell.</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-42/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-42/</guid>
      <pubDate>Sat, 25 Nov 2017 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;NoSQLBooster for MongoDB 4.2 (formerly MongoBooster)&lt;/a&gt;. This release includes query code generator for various target languages and one-click explain to return the queryPlanner information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One important change worth to mention is that we changed our name from MongoBooster to NoSQLBooster for MongoDB because of trademark reasons. Because of the name change, self-updating from previous versions to 4.2 will not work and you will have to manually download and install version 4.2. The user data and license information of previous versions will be automatically migrated after the installation is complete.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;Query-Code-Generator&quot;&gt;&lt;a href=&quot;#Query-Code-Generator&quot; class=&quot;headerlink&quot; title=&quot;Query Code Generator&quot;&gt;&lt;/a&gt;Query Code Generator&lt;/h1&gt;&lt;p&gt;NoSQLBooster for MongoDB 4.2 comes with query code generator that allows users to translate MongoDB queries (find, aggregate or SQL query) to various target languages: MongoDB Shell, JavaScript (Node.js), Java, C# and Python.&lt;/p&gt;
&lt;p&gt;To use query code generator:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enter find, aggregate or SQL Query statement, execute it and get the results.  (tip: With Release 4.1, you can even use visual query builder)&lt;/li&gt;
&lt;li&gt;Click the &amp;quot;Query Code Generator&amp;quot; button in the toolbar of result view and pop-up the &amp;quot;Query Code Generator&amp;quot; dialog&lt;/li&gt;
&lt;li&gt;Choose your target language from the drop-down list. The &amp;quot;Query Code Generator&amp;quot; currently supports MongoDB Shell, Javascript Node.js ES5, Javascript Node.js ES6 Promise, Javascript Node.js ES7 Async&amp;#x2F;Await, Python (PyMongo 3.x), C# (2.x driver) and Java (3.x driver)&lt;/li&gt;
&lt;li&gt;Copy generated code to clipboard&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/query-code-generator.gif&quot; alt=&quot;Query Code Generator&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of <a href="/downloads">NoSQLBooster for MongoDB 4.2 (formerly MongoBooster)</a>. This release includes query code generator for various target languages and one-click explain to return the queryPlanner information.</p><p><strong>One important change worth to mention is that we changed our name from MongoBooster to NoSQLBooster for MongoDB because of trademark reasons. Because of the name change, self-updating from previous versions to 4.2 will not work and you will have to manually download and install version 4.2. The user data and license information of previous versions will be automatically migrated after the installation is complete.</strong></p><hr><h1><span id="query-code-generator">Query Code Generator</span></h1><p>NoSQLBooster for MongoDB 4.2 comes with query code generator that allows users to translate MongoDB queries (find, aggregate or SQL query) to various target languages: MongoDB Shell, JavaScript (Node.js), Java, C# and Python.</p><p>To use query code generator:</p><ol><li>Enter find, aggregate or SQL Query statement, execute it and get the results.  (tip: With Release 4.1, you can even use visual query builder)</li><li>Click the &quot;Query Code Generator&quot; button in the toolbar of result view and pop-up the &quot;Query Code Generator&quot; dialog</li><li>Choose your target language from the drop-down list. The &quot;Query Code Generator&quot; currently supports MongoDB Shell, Javascript Node.js ES5, Javascript Node.js ES6 Promise, Javascript Node.js ES7 Async&#x2F;Await, Python (PyMongo 3.x), C# (2.x driver) and Java (3.x driver)</li><li>Copy generated code to clipboard</li></ol><p><img src="/blog/img/query-code-generator.gif" alt="Query Code Generator"></p><span id="more"></span><h1><span id="one-click-explain">One-Click Explain</span></h1><p>This release also provides a friendly One-Click explain feature that will call the &quot;cursor.explain&quot; method to return a document with the query plan and, optionally, the execution statistics. The feature supports the result cusor of find, aggregate or SQL query methods.</p><p>To use one-click explain:</p><ol><li>Enter find, aggregate or SQL Query statement, execute it and get the results.</li><li>Click the &quot;Explain&quot; button in the toolbar of result view and show the document with the query plan.</li></ol><p><img src="/blog/img/one-click-explain.gif" alt="One-Click Explain"></p><h1><span id="minor-enhancement">Minor Enhancement</span></h1><h2><span id="stats-tooltip-for-indexes">Stats Tooltip for Indexes</span></h2><p>This release also beautifies the stats tooltips and shows stats tooltip for the indexes.</p><p><img src="/blog/img/stats-tooltip-indexes.gif" alt="Tooltip for indexes"></p>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Code-Generator/">Query Code Generator</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Plan/">Query Plan</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-42/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoBooster 4.1 Released! Visual Query Builder and Scripts History Search</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-41/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-41/</guid>
      <pubDate>Mon, 30 Oct 2017 02:30:01 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;MongoBooster 4.1&lt;/a&gt;. This release includes visual query builder, scripts history search and a few minor updates.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;Visual-Query-Builder&quot;&gt;&lt;a href=&quot;#Visual-Query-Builder&quot; class=&quot;headerlink&quot; title=&quot;Visual Query Builder&quot;&gt;&lt;/a&gt;Visual Query Builder&lt;/h1&gt;&lt;p&gt;MongoBooster 4.1 comes with visual query builder. The &lt;em&gt;two-way&lt;/em&gt; query builder could help you construct and display complex MongoDB find statements even without the knowledge of the MongoDB shell commands syntax. &lt;/p&gt;
&lt;p&gt;To use query builder:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use the Query Builder button in the editor toolbar.&lt;/li&gt;
&lt;li&gt;Right-click the collection node in the connection tree, execute &amp;quot;Show Query Builder...&amp;quot;&lt;/li&gt;
&lt;li&gt;Popup Command Palette (Ctrl-Shift-P), enter &amp;quot;Query Builder&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://www.mongobooster.com/s3/img/query-builder.gif&quot; alt=&quot;Query Builder&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of <a href="/downloads">MongoBooster 4.1</a>. This release includes visual query builder, scripts history search and a few minor updates.</p><hr><h1><span id="visual-query-builder">Visual Query Builder</span></h1><p>MongoBooster 4.1 comes with visual query builder. The <em>two-way</em> query builder could help you construct and display complex MongoDB find statements even without the knowledge of the MongoDB shell commands syntax. </p><p>To use query builder:</p><ol><li>Use the Query Builder button in the editor toolbar.</li><li>Right-click the collection node in the connection tree, execute &quot;Show Query Builder...&quot;</li><li>Popup Command Palette (Ctrl-Shift-P), enter &quot;Query Builder&quot;</li></ol><p><img src="https://www.mongobooster.com/s3/img/query-builder.gif" alt="Query Builder"></p><span id="more"></span><h1><span id="scripts-history-search">Scripts History Search</span></h1><p>This release provides a more friendly scripts history search. I strongly believe, this might be your most frequently used feature of history. When you’ve already executed a very long shell script, you can simply search history using one or a few keywords and re-execute the same command without having to type it fully. Press Ctrl-F7 and type the keyword. In default, MongoBooster will filter history that contains the current database and collection.</p><ul><li>Tip: to match multiple words, please enter more keywords into the search box with + sign.</li></ul><p><img src="https://www.mongobooster.com/s3/img/scripts-history-search.gif" alt="Scripts History Search"></p><h1><span id="minor-enhancement">Minor Enhancement</span></h1><h2><span id="maximizing-and-restoring-script-editor-and-output-panel">Maximizing and Restoring Script Editor and Output Panel</span></h2><p>Editor&#x2F;Ouput panel can be maximized (other panel is minimized at the same time) to provide more space for editing your script or seeing the result. When panel is maximized, you can simply restore its original size. To maximize or restore panel, simply use the maximize&#x2F;restore button in the toolbar or press Ctrl-0 | Ctrl-9.</p><p><img src="https://www.mongobooster.com/s3/img/maxmize-panel.gif" alt="Maximize&#x2F;Restore Editor and Output Panel"></p><h2><span id="improved-cursorselect-method">improved cursor.select() method</span></h2><p>The cursor.select(arg: string|Object): ICursor method specifies which document fields to include or exclude. In addition to separating the field lists using spaces, the new version 4.1 also allows you to separate the fields using commas. The advantage is that the comma in the field list can popup Field Auto-complete list.</p><p><img src="https://www.mongobooster.com/s3/img/select-fields.gif" alt="Select Fields"></p><hr><h1><span id="bugfix-and-other-improvements">Bugfix and other improvements</span></h1><ul><li>Improved, Editor: after you comment a line (ctrl + &#x2F; ), advance cursor to next line. <a href="http://feedback.mongobooster.com/topic/editor-after-you-comment-a-line-ctrl-advance-cursor-to-next-line">link</a></li><li>Fixed, Windows line endings should present when coping to clipboard. <a href="http://feedback.mongobooster.com/topic/line-endings-should-present-when-coping-to-clipboard">link</a></li><li>Fixed, Data view, shift multi-select  ordering bug. <a href="http://feedback.mongobooster.com/topic/cut-then-paste-pastes-out-of-order">link</a></li><li>Fixed, GUID&#x2F;LGUID CSV export issue. <a href="http://feedback.mongobooster.com/topic/csuuid-wrong-values-after-export">link</a></li></ul><hr><h1><span id="hotfix">Hotfix</span></h1><h2><span id="hotfix-in-mongobooster-412">Hotfix in MongoBooster 4.1.2</span></h2><ul><li>Fixed,  Query Builder, correct db.group.find() to db.getCollection(&quot;group&quot;).find()</li><li>Fixed,  Query Builder, rules ordering bug</li></ul><h2><span id="hotfix-in-mongobooster-413">Hotfix in MongoBooster 4.1.3</span></h2><ul><li>Fixed,  &quot;Cannot find module &#39;.&#x2F;..&#x2F;pegjs-parser&#39;&quot; error when run SQL Query in Windows.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Builder/">Query Builder</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Scripts-History/">Scripts History</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-41/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>How to Query MongoDB with SQL SELECT</title>
      <link>https://www.nosqlbooster.com/blog/query-mongodb-with-sql/</link>
      <guid>https://www.nosqlbooster.com/blog/query-mongodb-with-sql/</guid>
      <pubDate>Wed, 06 Sep 2017 01:00:01 GMT</pubDate>
      
        
        
      <description>&lt;p&gt;&lt;small&gt;By &lt;a href=&quot;qinghai@nosqlbooster.com&quot;&gt;Qinghai&lt;/a&gt; | September 12, 2017&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;With NoSQLBooster for MongoDB, you can run S</description>
        
      
      
      
      <content:encoded><![CDATA[<p><small>By <a href="qinghai@nosqlbooster.com">Qinghai</a> | September 12, 2017</small></p><p>With NoSQLBooster for MongoDB, you can run SQL SELECT Query against MongoDB. SQL support includes functions, expressions, aggregation for collections with nested objects and arrays.<br>See <a href="/featuresForSQL">the features and SQL examples</a> supported by the NoSQLBooster for MongoDB. </p><p>Let&#39;s look at how to use the GROUP BY clause with the SUM function in SQL.</p><p>Instead of writing the MongoDB query which is represented as a JSON-like structure</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">aggregate</span>([</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">$group</span>: &#123;</span><br><span class="line">            <span class="attr">_id</span>: <span class="string">&quot;$department&quot;</span>,</span><br><span class="line">            <span class="attr">total</span>: &#123; <span class="attr">$sum</span>: <span class="string">&quot;$salary&quot;</span> &#125;</span><br><span class="line">        &#125;,</span><br><span class="line">    &#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><p>You can query MongoDB by using old SQL which you probably already know.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">  SELECT department, SUM(salary) AS total FROM employees GROUP BY department</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">`</span>);</span><br></pre></td></tr></table></figure><hr><h1><span id="features">Features</span></h1><ul><li>Access data via SQL including WHERE filters, ORDER BY, GROUP BY, HAVING, DISTINCT, LIMIT            </li><li>SQL Functions (COUNT, SUM, MAX, MIN, AVG)            </li><li>SQL Functions (Date, String, Conversion)</li><li>SQL Equi JOIN and Uncorrelated SubQuery</li><li>Aggregation Pipeline Operators as SQL Functions (dateToString, toUpper, split, substr...)</li><li>Provide a programming interface (mb.runSQLQuery) that can be integrated into your script</li><li>Autocomplete for keywords, MongoDB collection names, field names, and SQL functions</li></ul><p>Please note that MongoDB does not natively support SQL features. The SQL query is validated and translated into a MongoDB query and executed by NoSQLBooster for MongoDB. The Equivalent MongoDB Query can be viewed in the console.log tab.</p><p>It should be mentioned that there is a tutorial on NoSQLBooster SQL Query for MongoDB in the lower left “Samples” pane. With this tutorial, you can learn and understand how to use NoSQLBooster SQL Query for MongoDB. Better yet, all SQL Functions provide the appropriate code snippets and mouse hover information and support code completion.</p><p><img src="/blog/img/sql-equi-join.png" alt="SQL Query for MongoDB Tutorial"> </p><hr><h1><span id="getting-started">Getting Started</span></h1><p>For example, the employees&#39; collection has the following fields including number, first_name, last_name, salary, department, and hire_date.</p><h2><span id="prepare-demo-data">Prepare Demo Data</span></h2><p>Insert the following demo data to MongoDB. Open a shell tab &quot;Command-T&quot; and execute the following script to get the employees collection.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">insert</span>([   </span><br><span class="line">  &#123;<span class="string">&quot;number&quot;</span>:<span class="number">1001</span>,<span class="string">&quot;last_name&quot;</span>:<span class="string">&quot;Smith&quot;</span>,<span class="string">&quot;first_name&quot;</span>:<span class="string">&quot;John&quot;</span>,<span class="string">&quot;salary&quot;</span>:<span class="number">62000</span>,<span class="string">&quot;department&quot;</span>:<span class="string">&quot;sales&quot;</span>, <span class="attr">hire_date</span>:<span class="title class_">ISODate</span>(<span class="string">&quot;2016-01-02&quot;</span>)&#125;,</span><br><span class="line">  &#123;<span class="string">&quot;number&quot;</span>:<span class="number">1002</span>,<span class="string">&quot;last_name&quot;</span>:<span class="string">&quot;Anderson&quot;</span>,<span class="string">&quot;first_name&quot;</span>:<span class="string">&quot;Jane&quot;</span>,<span class="string">&quot;salary&quot;</span>:<span class="number">57500</span>,<span class="string">&quot;department&quot;</span>:<span class="string">&quot;marketing&quot;</span>, <span class="attr">hire_date</span>:<span class="title class_">ISODate</span>(<span class="string">&quot;2013-11-09&quot;</span>)&#125;,</span><br><span class="line">  &#123;<span class="string">&quot;number&quot;</span>:<span class="number">1003</span>,<span class="string">&quot;last_name&quot;</span>:<span class="string">&quot;Everest&quot;</span>,<span class="string">&quot;first_name&quot;</span>:<span class="string">&quot;Brad&quot;</span>,<span class="string">&quot;salary&quot;</span>:<span class="number">71000</span>,<span class="string">&quot;department&quot;</span>:<span class="string">&quot;sales&quot;</span>, <span class="attr">hire_date</span>:<span class="title class_">ISODate</span>(<span class="string">&quot;2017-02-03&quot;</span>)&#125;,</span><br><span class="line">  &#123;<span class="string">&quot;number&quot;</span>:<span class="number">1004</span>,<span class="string">&quot;last_name&quot;</span>:<span class="string">&quot;Horvath&quot;</span>,<span class="string">&quot;first_name&quot;</span>:<span class="string">&quot;Jack&quot;</span>,<span class="string">&quot;salary&quot;</span>:<span class="number">42000</span>,<span class="string">&quot;department&quot;</span>:<span class="string">&quot;marketing&quot;</span>, <span class="attr">hire_date</span>:<span class="title class_">ISODate</span>(<span class="string">&quot;2017-06-01&quot;</span>)&#125;,</span><br><span class="line">])</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="select-all-fields">Select All Fields</span></h2><p>First, click on employees collection, then click on &quot;SQL Query Tab&quot;  in the tab toolbar or use the &quot;Command-Alt-T&quot; keyboard shortcut. A basic &quot;SELECT * from employees&quot;  is automatically generated for us!  NoSQLBooster for MongoDB also offers a &quot;runSQLQuery&quot; code snippets. Just type a snippet prefix &quot;run&quot;, and press &quot;tab&quot; to insert this snippet. </p><p><img src="/blog/img/sql-query-basic.png" alt="alt text" title="SQL Query Tab"></p><p>Just execute the query by clicking the execute button or use the &quot;Command-Enter&quot; keyboard shortcut. This would produce the result as shown below.</p><p><img src="/blog/img/sql-basic-result.png" alt="alt text" title="Simple Query Result"></p><ul><li>NoSQLBooster for MongoDB provides in-place editing in result tree view. Double-click on any value or array element to edit. Pressing &quot;Esc&quot; return the previous value and exit the editor.</li><li>If you want the results not to be edited directly, you can enable the &quot;read-only&quot; mode by clicking the lock button in the toolbar.</li></ul><h2><span id="select-individual-fields-and-field-name-auto-complete">Select Individual Fields and Field Name Auto-complete</span></h2><p> Let&#39;s fetch the first_name, last_name and salary fields of the employees available in employees table and sort the result in the descending order by salary.</p><p> <img src="/blog/img/sql-select-fields-order-by.png" alt="alt text" title="Projection and field auto-complete"></p><p> The built-in SQL language service knows all possible completions, SQL functions,  keywords, MongoDB collection names, and field names. The IntelliSense suggestions pop up as you type. You can always manually trigger it with &quot;Ctrl-Shift-Space&quot;}}}. Out of the box, &quot;Ctrl-Space&quot;}}}, &quot;Alt-Space&quot;}}} are also acceptable triggers.</p><h2><span id="view-the-equivalent-mongodb-query">View the Equivalent MongoDB Query</span></h2><h3><span id="how-to-show-the-equivalent-mongodb-query">How to show the equivalent MongoDB query?</span></h3><ul><li>Method 1: Turn on the Verbose Shell option, Main Menu-&gt; Options -&gt; Verbose Shell(setVerboseShell)</li><li>Method 2: Click the <a href="/img/run_sql_query_code_button.png">&quot;Code&quot; button</a> in the upper-right corner of the editor toolbar to show the equivalent MongoDB query.</li></ul><p><img src="/blog/img/sql-query-mongodb-json-like.png" alt="alt text" title="Equivalent Classic MongoDB query"></p><p>As you know, NoSQLBooster for MongoDB supports <a href="/FluentQueryAPI">mongoose-like fluent Query API</a>, Click Menu-&gt; Options -&gt; Translate SQL to MongoDB Shell Script, click &quot;Translate SQL to NoSQLBooster for MongoDB Fluent API&quot;. Re-execute the script,  the equivalent fluent MongoDB query will be shown in the &quot;console.log&#x2F;print&quot; tab.</p><p><img src="/blog/img/sql-query-fluent-api.png" alt="alt text" title="Equivalent Fluent MongoDB query"></p><h2><span id="use-string-and-date-sql-functions">Use String and Date SQL Functions</span></h2><p>This time, we want to find all employees who are hired this year, and display first_name and last_name as full name. Please enter the following SQL statement and click execute button:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span>  concat(&quot;first_name&quot;, <span class="string">&#x27; &#x27;</span>, &quot;last_name&quot;) <span class="keyword">as</span> fullname,</span><br><span class="line">      dateToString(<span class="string">&#x27;%Y-%m-%d&#x27;</span>,&quot;hire_date&quot;) <span class="keyword">as</span> hiredate </span><br><span class="line"><span class="keyword">FROM</span> employees </span><br><span class="line"><span class="keyword">WHERE</span> &quot;hire_date&quot; <span class="operator">&gt;=</span> <span class="type">date</span>(<span class="string">&#x27;2017-01-01&#x27;</span>) </span><br></pre></td></tr></table></figure><p>Clicking on the &quot;console.log&#x2F;print&quot; tab to show the equivalent MongoDB query:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">aggregate</span>(</span><br><span class="line">  [&#123;</span><br><span class="line">      <span class="string">&quot;$match&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;hire_date&quot;</span>: &#123;</span><br><span class="line">          <span class="string">&quot;$gte&quot;</span>: <span class="title class_">ISODate</span>(<span class="string">&quot;2017-01-01T08:00:00.000+08:00&quot;</span>)</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="string">&quot;$project&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;fullname&quot;</span>: &#123;</span><br><span class="line">          <span class="string">&quot;$concat&quot;</span>: [</span><br><span class="line">            <span class="string">&quot;$first_name&quot;</span>,</span><br><span class="line">            <span class="string">&quot; &quot;</span>,</span><br><span class="line">            <span class="string">&quot;$last_name&quot;</span></span><br><span class="line">          ]</span><br><span class="line">        &#125;,</span><br><span class="line">        <span class="string">&quot;hiredate&quot;</span>: &#123;</span><br><span class="line">          <span class="string">&quot;$dateToString&quot;</span>: &#123;</span><br><span class="line">            <span class="string">&quot;format&quot;</span>: <span class="string">&quot;%Y-%m-%d&quot;</span>,</span><br><span class="line">            <span class="string">&quot;date&quot;</span>: <span class="string">&quot;$hire_date&quot;</span></span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  ])</span><br></pre></td></tr></table></figure><p><img src="/blog/img/sql-query-concat-datestring.png" alt="alt text" title="String and Date Functions"></p><p>Let us look at concat function <strong>concat(&quot;first_name&quot;, &#39; &#39;, &quot;last_name&quot;)</strong>. The concat function is a MongoDB string aggregation operators. Through mapping SQL functions to MongoDB operators, NoSQLBooster for MongoDB allows you to use all MongoDB aggregation operators as SQL functions in you SQL statement.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// instead of writing</span></span><br><span class="line">&#123; <span class="attr">$concat</span>: [ <span class="string">&quot;$first_name&quot;</span>, <span class="string">&quot; &quot;</span>, <span class="string">&quot;last_name&quot;</span> ] &#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// we write,  </span></span><br><span class="line"><span class="title function_">concat</span>(<span class="string">&quot;first_name&quot;</span>, <span class="string">&#x27; &#x27;</span>, <span class="string">&quot;last_name&quot;</span>) <span class="comment">//Double quotes quote field name, Single quotes are for strings</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// or </span></span><br><span class="line"><span class="title function_">concat</span>(first_name, <span class="string">&#x27; &#x27;</span>, last_name)  <span class="comment">//allow to omit double quotes</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><ol><li>No $ prefix with MongoDB operator and collection field name.</li><li><strong>Double quotes quote field name. Single quotes are for strings.</strong></li><li>All function names are case-sensitive except for COUNT, SUM, MAX, MIN, AVG.</li><li>We can use the standard SQL comparison operators: &#x3D;, !&#x3D;, &lt;&gt;, &lt;, &lt;&#x3D;, &gt;&#x3D;, or &gt;.</li></ol><p>The date function converts a string to a MongoDB Date type. NoSQLBooster for MongoDB uses Moment.js to parse date string. When creating a date from a string, Moment.js first check if the string matches the known ISO 8601 formats, Moment.js then check if the string matches the RFC 2822 Date time format before dropping to the fall back of new Date(string) if a known format is not found.</p><p>Please refer to <a href="https://momentjs.com/docs/#/parsing/string/">Moment.js parse string document</a> to view all supported string formats.</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># An ISO 8601 string requires a date part.</span></span><br><span class="line"></span><br><span class="line">2013-02-08  <span class="comment"># A calendar date part</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#A time part can also be included, separated from the date part by a space or an uppercase T.</span></span><br><span class="line">2013-02-08 09:30         <span class="comment"># An hour and minute time part</span></span><br><span class="line">2013-02-08 09:30:26      <span class="comment"># An hour, minute, and second time part</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#If a time part is included, an offset from UTC can also be included as +-HH:mm, +-HHmm, +-HH or Z.</span></span><br><span class="line"></span><br><span class="line">2017-01-01T08:00:00.000+08:00</span><br><span class="line">2013-02-08 09+07:00            <span class="comment"># +-HH:mm</span></span><br><span class="line">2013-02-08 09:30:26.123+07:00  <span class="comment"># +-HH:mm</span></span><br></pre></td></tr></table></figure><p>The dateToString is another MongoDB date operator to convert a date object to a string according to a user-specified format. The <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/#exp._S_dateToString">$dateToString</a> expression has the following syntax:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123; <span class="attr">$dateToString</span>: &#123; <span class="attr">format</span>: &lt;formatString&gt;, <span class="attr">date</span>: &lt;dateExpression&gt; &#125; &#125;</span><br></pre></td></tr></table></figure><p>As SQL functions doesn&#39;t support JSON object parameter, NoSQLBooster for MongoDB converts the object param as plain parameter list.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">dateToString</span>(<span class="string">&#x27;%Y-%m-%d&#x27;</span>,<span class="string">&quot;hire_date&quot;</span>) <span class="keyword">as</span> hiredate </span><br></pre></td></tr></table></figure><p>The first parameter is formatString, single quotes, the second parameter is &quot;Date Field&quot;,  double quotes.</p><p>Please follow <a href="https://docs.mongodb.com/manual/reference/operator/aggregation-date/">this link</a> to learn more about MongoDB date aggregation operators.</p><h2><span id="quoting-names-and-string-values">Quoting Names and String Values</span></h2><p>In NoSQLBooster, we follow ANSI SQL standard. Single quotes delimit a string constant or a date&#x2F;time constant. Double quotes delimit identifiers e.g., collection names or column names. This is generally only necessary when your identifier doesn&#39;t fit the rules for simple identifiers.</p><p>The following SQL statement selects all the customers from the department &quot;sales,&quot; in the &quot;employees&quot; collection:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> employees <span class="keyword">WHERE</span> department<span class="operator">=</span><span class="string">&#x27;sales&#x27;</span>;</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB query</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;department&quot;</span>: <span class="string">&quot;sales&quot;</span></span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>Single quotes are for strings. If you double quotes &quot;sales,&quot; NoSQLBooster for MongoDB treat it as a column &quot;sales,&quot; not a string &#39;sales&#39;.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> employees <span class="keyword">WHERE</span> department<span class="operator">=</span>&quot;sales&quot;;</span><br></pre></td></tr></table></figure><p>The SQL generated the following MongoDB query that you may not want</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">aggregate</span>(</span><br><span class="line">  [&#123;</span><br><span class="line">      <span class="string">&quot;$addFields&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;__tmp_cond_1&quot;</span>: &#123;</span><br><span class="line">          <span class="string">&quot;$eq&quot;</span>: [</span><br><span class="line">            <span class="string">&quot;$department&quot;</span>,</span><br><span class="line">            <span class="string">&quot;$sales&quot;</span></span><br><span class="line">          ]</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="string">&quot;$match&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;__tmp_cond_1&quot;</span>: <span class="literal">true</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="string">&quot;$project&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;__tmp_cond_1&quot;</span>: <span class="number">0</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  ])</span><br></pre></td></tr></table></figure><p>Stick to using single quotes.</p><h2><span id="explain-data-for-the-query">Explain Data for the Query</span></h2><p>Just add a new line &quot;.explain()&quot; to the end of mb.runSQLQuery and click execute button again. It returns the information on the processing of the pipeline. </p><p><img src="/blog/img/sql-query-explain.png" alt="alt text" title="Explain Data for the Query"></p><h2><span id="querying-special-bson-data-types-uuid-bindata-dbref">Querying Special BSON Data Types, UUID, BinData, DBRef...</span></h2><p>To query values of these particular BSON Data types, write the values as you would in the MongoDB shell. All MongoDB build-in Data Types functions are available.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--date</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> date_field <span class="operator">&gt;=</span> <span class="type">date</span>(&quot;2018-02-09T00:00:00+08:00&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> date_field <span class="operator">&gt;=</span> ISODate(&quot;2018-02-09&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--number</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> int64_field <span class="operator">&gt;=</span> NumberLong(&quot;3223123123122132992&quot;) </span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> decimal_field <span class="operator">=</span> NumberDecimal(&quot;8989922322323232.12&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--Regular Expression</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> string_field <span class="operator">=</span> RegExp(<span class="string">&#x27;query&#x27;</span>,<span class="string">&#x27;i&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--binary</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> objectId_field <span class="operator">=</span> ObjectId(&quot;56034dae9b835b3ee6a52cb7&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> binary_field <span class="operator">=</span> BinData(<span class="number">0</span>,&quot;X96v3g==&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> md5_field <span class="operator">=</span> MD5(&quot;f65485ac0686409aabfa006f0c771fbb&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> hex_field <span class="operator">=</span> HexData(<span class="number">0</span>,&quot;00112233445566778899aabbccddeeff&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--uuid</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> uuid_field <span class="operator">=</span> UUID(&quot;4ae5bfce-1dba-4776-80eb-17678822b94e&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> LUUID(&quot;8c425c91-6a72-c25c-1c9d-3cfe237e7c92&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> JSUUID(&quot;8c425c91-6a72-c25c-1c9d-3cfe237e7c92&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> CSUUID(&quot;6a72c25c-5c91-8c42-927c-7e23fe3c9d1c&quot;)</span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> luuid_field <span class="operator">=</span> PYUUID(&quot;5cc2726a-915c-428c-927c-7e23fe3c9d1c&quot;)</span><br><span class="line"></span><br><span class="line"><span class="comment">--timstamp</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> timestamp_field <span class="operator">=</span> <span class="type">Timestamp</span>(<span class="number">1443057070</span>, <span class="number">1</span>)</span><br><span class="line"><span class="comment">--symbol</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> symbol_field <span class="operator">=</span> Symbol(<span class="string">&#x27;I am a symbol&#x27;</span>)</span><br><span class="line"><span class="comment">--dbref</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> dbref_field <span class="operator">=</span> DBRef(&quot;unicorns&quot;, ObjectId(&quot;55f23233edad44cb25b0d51a&quot;))</span><br><span class="line"><span class="comment">--minkey maxkey</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> minkey_field <span class="operator">=</span> MinKey <span class="keyword">and</span> maxkey_field <span class="operator">=</span> MaxKey</span><br><span class="line"></span><br><span class="line"><span class="comment">--array, array_field is [1, 2, &#x27;3&#x27;]</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> array_field <span class="operator">=</span> [<span class="number">1</span>,<span class="number">2</span>,<span class="string">&#x27;3&#x27;</span>]</span><br><span class="line"></span><br><span class="line"><span class="comment">--object, object_field is &#123; a : 1, b : &#123;b1 : 2,    b2 : &quot;b2&quot;&#125;</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> object_field <span class="operator">=</span> toJS(a<span class="operator">=</span><span class="number">1</span>, b<span class="operator">=</span>toJS(b1<span class="operator">=</span><span class="number">2</span>, b2<span class="operator">=</span><span class="string">&#x27;b2&#x27;</span>))</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="accessing-arrays-and-embedded-documents">Accessing Arrays and Embedded Documents</span></h2><p>Nested documents (sub-documents) and arrays including filters and expressions are supported. You can access such fields using a dotted name.</p><p>Given the following documents in the survey collection:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">insert</span>([   </span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">1</span>, <span class="attr">results</span>: [ &#123; <span class="attr">product</span>: <span class="string">&quot;abc&quot;</span>, <span class="attr">score</span>: <span class="number">10</span> &#125;, &#123; <span class="attr">product</span>: <span class="string">&quot;xyz&quot;</span>, <span class="attr">score</span>: <span class="number">5</span> &#125; ]&#125;,</span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">2</span>, <span class="attr">results</span>: [ &#123; <span class="attr">product</span>: <span class="string">&quot;abc&quot;</span>, <span class="attr">score</span>: <span class="number">8</span> &#125;, &#123; <span class="attr">product</span>: <span class="string">&quot;xyz&quot;</span>, <span class="attr">score</span>: <span class="number">7</span> &#125; ]&#125;,</span><br><span class="line">  &#123; <span class="attr">_id</span>: <span class="number">3</span>, <span class="attr">results</span>: [ &#123; <span class="attr">product</span>: <span class="string">&quot;abc&quot;</span>, <span class="attr">score</span>: <span class="number">7</span> &#125;, &#123; <span class="attr">product</span>: <span class="string">&quot;xyz&quot;</span>, <span class="attr">score</span>: <span class="number">8</span> &#125; ]&#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><p>The &quot;product&quot; and &quot;score&quot; would be referenced as results.product and results.score respectively:</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey  <span class="keyword">WHERE</span> results.product <span class="operator">=</span> <span class="string">&#x27;xyz&#x27;</span> <span class="keyword">AND</span> results.score <span class="operator">&gt;=</span> <span class="number">8</span>;</span><br></pre></td></tr></table></figure><p>or</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey  <span class="keyword">WHERE</span> &quot;results.product&quot; <span class="operator">=</span> <span class="string">&#x27;xyz&#x27;</span> <span class="keyword">AND</span> &quot;results.score&quot; <span class="operator">&gt;=</span> <span class="number">8</span>;</span><br></pre></td></tr></table></figure><p><em><strong>Element Match with Embedded Documents</strong></em></p><p><i class="fa fa-lightbulb"></i> The elemMatch query criteria <em><strong>(score &gt;&#x3D;8)</strong></em> will be translated as <em><strong>&quot;score&quot;: { &quot;$gte&quot;: 8 }</strong></em>. This syntax is more concise and expressive.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;elemMatch [Tab]&quot;, to trigger auto-complete</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;results&quot; <span class="operator">=</span>elemMatch(product<span class="operator">=</span><span class="string">&#x27;xyz&#x27;</span>, score <span class="operator">&gt;=</span><span class="number">8</span>)</span><br></pre></td></tr></table></figure><h2><span id="sql-equi-join">SQL Equi JOIN</span></h2><p>NoSQLBooster supports SQL Equi JOIN which performs a JOIN against equality or matching column(s) values of the associated tables.<br>An equal sign (&#x3D;) is used as comparison operator in the where clause to refer equality.</p><p>NoSQLBooster supports INNER JOIN and LEFT JOIN, OUTER JOIN is not supported.</p><ol><li>(INNER) JOIN: Returns records that have matching values in both tables</li><li>LEFT JOIN: Return all records from the left table, and the matched records from the right table</li></ol><p>Equi JOIN will be translated as MongoDB $lookup stage. (MongoDB 3.2+) refer to: <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/lookup">https://docs.mongodb.com/manual/reference/operator/aggregation/lookup</a></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> orders <span class="keyword">JOIN</span> inventory <span class="keyword">ON</span> orders.item<span class="operator">=</span>inventory.sku</span><br></pre></td></tr></table></figure><h2><span id="the-quottojsquot-sql-function-and-named-parameter">The &quot;toJS&quot; SQL Function and named parameter</span></h2><p>The “toJS” helper function transforms the named parameters and arithmetic operator into a JSON object, also transforms an ordinary parameter list into an array.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">toJS</span>(k=<span class="string">&#x27;v&#x27;</span>); <span class="comment">//result &#123;k:&#x27;v&#x27;&#125;</span></span><br><span class="line"><span class="title function_">toJS</span>(k=<span class="string">&quot;v&quot;</span>); <span class="comment">//result &#123;k:&#x27;$v&#x27;&#125;, Double quotes quote object names</span></span><br><span class="line"><span class="title function_">toJS</span>(k=v); <span class="comment">//result &#123;k:&#x27;$v&#x27;&#125;, without quote, v is a object name</span></span><br><span class="line"><span class="title function_">toJS</span>(k&gt;<span class="number">5</span>, k&lt;=<span class="number">10</span>); <span class="comment">//result  &#123; &quot;k&quot;: &#123; &quot;$gt&quot;: 5, &quot;$lte&quot;: 10&#125; &#125;</span></span><br><span class="line"><span class="title function_">toJS</span>(a=<span class="number">1</span>, b=<span class="title function_">toJS</span>(b1=<span class="number">2</span>, b2=<span class="string">&#x27;b2&#x27;</span>)); <span class="comment">//result &#123;a : 1, b : &#123;b1 : 2,    b2 : &quot;b2&quot;&#125;</span></span><br><span class="line"><span class="title function_">toJS</span>(<span class="number">1</span>, <span class="number">2</span>,<span class="string">&#x27;3&#x27;</span>); <span class="comment">// result  [1,2,&#x27;3&#x27;];</span></span><br></pre></td></tr></table></figure><p>With named parameter and &quot;toJS&quot; helper function, you can query complex objects or pass JSON-object parameter to a SQL function.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--elemMatch, named parameter and Arithmetic operators</span></span><br><span class="line"><span class="comment">--cool stuff,  (score&gt;8, score&lt;=10) will be translated as  &#123;&quot;score&quot;: &#123; &quot;$gt&quot;: 8, &quot;$lte&quot;: 10 &#125;&#125;</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> results <span class="operator">=</span>elemMatch(item<span class="operator">=</span><span class="string">&#x27;abc&#x27;</span>, score<span class="operator">&gt;</span><span class="number">8</span>, score<span class="operator">&lt;=</span><span class="number">10</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--date timezone, named parameter</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="keyword">year</span>(<span class="type">date</span><span class="operator">=</span>&quot;date&quot;, timezone<span class="operator">=</span><span class="string">&#x27;America/Chicago&#x27;</span>) <span class="keyword">as</span> <span class="keyword">year</span> <span class="keyword">FROM</span> sales</span><br><span class="line"></span><br><span class="line"><span class="comment">--query object type value, object_field: &#123; a : 1, b : &#123;b1 : 2,    b2 : &quot;b2&quot;&#125;</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> object_field <span class="operator">=</span> toJS(a<span class="operator">=</span><span class="number">1</span>, b<span class="operator">=</span>toJS(b1<span class="operator">=</span><span class="number">2</span>, b2<span class="operator">=</span><span class="string">&#x27;b2&#x27;</span>))</span><br><span class="line"></span><br><span class="line"><span class="comment">-- text search with full-text search options</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> article <span class="keyword">WHERE</span> </span><br><span class="line">   $text <span class="operator">=</span> toJS($<span class="keyword">search</span><span class="operator">=</span><span class="string">&#x27;cake&#x27;</span>,  $<span class="keyword">language</span><span class="operator">=</span><span class="string">&#x27;en&#x27;</span>, $caseSensitive<span class="operator">=</span><span class="literal">false</span>, $diacriticSensitive<span class="operator">=</span><span class="literal">false</span>) </span><br><span class="line"></span><br><span class="line"><span class="keyword">SELECT</span> literal(toJS(k<span class="operator">&gt;</span><span class="number">5</span>, k<span class="operator">&lt;=</span><span class="number">10</span>))  <span class="keyword">FROM</span> collection</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="mixed-use-of-sql-and-chainable-aggregation-pipeline">Mixed use of SQL and Chainable Aggregation Pipeline</span></h2><p>NoSQLBooster for MongoDB translates SQL to MongoDB find&#x2F;aggregate method which returns a AggregateCursor. All MongoDB <a href="https://docs.mongodb.com/manual/reference/method/js-cursor/">cursor methods</a> and NoSQLBooster for MongoDB&#39;s <a href="/FluentQueryAPI#CursorExtensionMethods">extension methods</a> can be called. This also allows NoSQLBooster Intellisense to know all AggregateCursor&#39;s chainable stage methods. (sort, limit, match, project, unwind...)</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">       SELECT * FROM &quot;survey&quot; where type=&#x27;ABC&#x27; and year(date) = 2018 ORDER BY &quot;results.score&quot; DESC</span></span><br><span class="line"><span class="string">       </span></span><br><span class="line"><span class="string">`</span>)</span><br><span class="line">.<span class="title function_">unwind</span>(<span class="string">&#x27;$tags&#x27;</span>)</span><br><span class="line">.<span class="title function_">project</span>(<span class="string">&quot;-_id&quot;</span>) <span class="comment">//alias select</span></span><br><span class="line">.<span class="title function_">limit</span>(<span class="number">1000</span>)</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Query is a bit longer.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">aggregate</span>(</span><br><span class="line">[</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$addFields&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;year(date)&quot;</span> : &#123;</span><br><span class="line">                <span class="string">&quot;$year&quot;</span> : <span class="string">&quot;$date&quot;</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$match&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;type&quot;</span> : <span class="string">&quot;ABC&quot;</span>,</span><br><span class="line">            <span class="string">&quot;year(date)&quot;</span> : <span class="number">2018</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$project&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;year(date)&quot;</span> : <span class="number">0</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$sort&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;results.score&quot;</span> : -<span class="number">1</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$unwind&quot;</span> : <span class="string">&quot;$tags&quot;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$project&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;_id&quot;</span> : <span class="number">0</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$limit&quot;</span> : <span class="number">1000</span></span><br><span class="line">    &#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><h2><span id="save-sql-query-as-mongodb-read-only-view">Save SQL Query as MongoDB Read-only View</span></h2><p>You can use the extension method &quot;saveAsView&quot; to save SQL Query result as a MongoDB read-only view.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//double quotes quote object names (e.g. &quot;collection&quot;). Single quotes are for strings &#x27;string&#x27;.</span></span><br><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">&quot;</span></span><br><span class="line"><span class="string">      SELECT  concat(first_name, &#x27; &#x27;, last_name) as fullname,</span></span><br><span class="line"><span class="string">            dateToString(&#x27;%Y-%m-%d&#x27;,hire_date) as hiredate </span></span><br><span class="line"><span class="string">      FROM employees </span></span><br><span class="line"><span class="string">      WHERE hire_date &gt;= date(&#x27;2017-01-01&#x27;) </span></span><br><span class="line"><span class="string">       </span></span><br><span class="line"><span class="string">&quot;</span>).<span class="title function_">saveAsView</span>(<span class="string">&quot;Employers_hired_after_2017&quot;</span>, &#123;<span class="attr">dropIfExists</span>:<span class="literal">true</span>&#125;) <span class="comment">//drop view if it exists.</span></span><br></pre></td></tr></table></figure><p>You can also use the forEach method to apply a javascript method to each document.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">&quot;SELECT * FROM employees WHERE hire_date &gt;= date(&#x27;2017-01-01&#x27;)&quot;</span>)</span><br><span class="line">  .<span class="title function_">forEach</span>(<span class="function"><span class="params">it</span>=&gt;</span>&#123;</span><br><span class="line">    <span class="comment">//sendToMail(it)</span></span><br><span class="line">  &#125;);</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2><span id="sql-snippets">SQL Snippets</span></h2><p>NoSQLBooster includes a lot of SQL-specific code snippets to save you time, Date Range, Text Search, Query and Array, Existence Check, Type Check and so on. You can always manually trigger it with &quot;Ctrl-Shift-Space&quot;}}}. Out of the box, &quot;Ctrl-Space&quot;}}}, &quot;Alt-Space&quot;}}} are acceptable triggers.</p><p><img src="/blog/img/sql-snippet-daterange.gif" alt="SQL Snippet"></p><h3><span id="sql-date-range-snippets">SQL Date Range Snippets</span></h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;daterange [Tab],&quot; then..., today, yesterday, lastNDays</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span></span><br><span class="line">  &quot;|&quot; <span class="operator">&gt;=</span> <span class="type">date</span>(&quot;2018-02-09T00:00:00+08:00&quot;) <span class="keyword">and</span> &quot;|&quot; <span class="operator">&lt;</span> <span class="type">date</span>(&quot;2018-02-10T00:00:00+08:00&quot;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3><span id="text-search-snippets">Text Search Snippets</span></h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;text [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> $text <span class="operator">=</span> toJS($<span class="keyword">search</span><span class="operator">=</span><span class="string">&#x27;|&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;textopt [Tab]&quot;, then...</span></span><br><span class="line"><span class="comment">--  with full-text search options</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> </span><br><span class="line">   $text <span class="operator">=</span> toJS($<span class="keyword">search</span><span class="operator">=</span><span class="string">&#x27;|&#x27;</span>,  $<span class="keyword">language</span><span class="operator">=</span><span class="string">&#x27;en&#x27;</span>, $caseSensitive<span class="operator">=</span><span class="literal">false</span>, $diacriticSensitive<span class="operator">=</span><span class="literal">false</span>) </span><br><span class="line"></span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Text Search</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">collection</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;$text&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;$search&quot;</span>: <span class="string">&quot;|&quot;</span>,</span><br><span class="line">    <span class="string">&quot;$language&quot;</span>: <span class="string">&quot;en&quot;</span>,</span><br><span class="line">    <span class="string">&quot;$caseSensitive&quot;</span>: <span class="literal">false</span>,</span><br><span class="line">    <span class="string">&quot;$diacriticSensitive&quot;</span>: <span class="literal">false</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3><span id="query-an-array-all-and-elemmatch-snippets">Query an Array ($all and $elemMatch) Snippets</span></h3><p>The $elemMatch operator matches documents that contain an array field with at least one element that matches all the specified query criteria.</p><ul><li>Element Match with Embedded Documents</li></ul><p><i class="fa fa-lightbulb"></i> The elemMatch query criteria <em><strong>(quantity&gt;2, quantity&lt;&#x3D;10)</strong></em> will be translated as *** &quot;quantity&quot;: { &quot;$gt&quot;: 2, &quot;$lte&quot;: 10 }***. This syntax is more concise and expressive.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;elemem [Tab]&quot;, then...</span></span><br><span class="line"><span class="comment">--  </span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span>elemMatch(product<span class="operator">=</span><span class="string">&#x27;abc&#x27;</span>, quantity<span class="operator">&gt;</span><span class="number">2</span>, quantity<span class="operator">&lt;=</span><span class="number">10</span>)</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Query</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;|&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;$elemMatch&quot;</span>: &#123;</span><br><span class="line">      <span class="string">&quot;product&quot;</span>: <span class="string">&quot;abc&quot;</span>,</span><br><span class="line">      <span class="string">&quot;quantity&quot;</span>: &#123;</span><br><span class="line">        <span class="string">&quot;$gt&quot;</span>: <span class="number">2</span>,</span><br><span class="line">        <span class="string">&quot;$lte&quot;</span>: <span class="number">10</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><ul><li>Element Match</li></ul><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;elem [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;score&quot; <span class="operator">=</span>elemMatch($gte<span class="operator">=</span><span class="number">80</span>, $lte<span class="operator">=</span><span class="number">85</span>)</span><br></pre></td></tr></table></figure><p>The equivalent MongoDB Query</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">survey</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">  <span class="string">&quot;score&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;$elemMatch&quot;</span>: &#123;</span><br><span class="line">      <span class="string">&quot;$gte&quot;</span>: <span class="number">80</span>,</span><br><span class="line">      <span class="string">&quot;$lte&quot;</span>: <span class="number">85</span></span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>The $all array operator selects the documents where the value of a field is an array that contains all the specified elements.</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;all [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> survey <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> toJS($<span class="keyword">all</span><span class="operator">=</span>[<span class="string">&#x27;&#x27;</span>, <span class="string">&#x27;&#x27;</span>])</span><br></pre></td></tr></table></figure><h3><span id="existence-check-and-type-check-snippets">Existence Check and Type Check Snippets</span></h3><ul><li>Existence Check ($exists)</li></ul><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;exists [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span>$<span class="keyword">exists</span>(<span class="literal">TRUE</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;nonExist [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> $<span class="keyword">exists</span>(<span class="literal">FALSE</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;existAndIsNull [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> $<span class="keyword">exists</span>(<span class="literal">TRUE</span>) <span class="keyword">and</span> &quot;|&quot; <span class="keyword">IS</span> <span class="keyword">NULL</span></span><br><span class="line"></span><br><span class="line"><span class="comment">--  Enter &quot;existAndIsNotNull [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> $<span class="keyword">exists</span>(<span class="literal">TRUE</span>) <span class="keyword">and</span> &quot;|&quot; <span class="keyword">IS</span> <span class="keyword">NOT NULL</span></span><br></pre></td></tr></table></figure><ul><li>Querying by Multiple Data Type ($type)</li></ul><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--  Enter &quot;typeSearch [Tab]&quot;, then...</span></span><br><span class="line"><span class="keyword">SELECT</span> <span class="operator">*</span> <span class="keyword">FROM</span> collection <span class="keyword">WHERE</span> &quot;|&quot; <span class="operator">=</span> toJS($type<span class="operator">=</span>[<span class="string">&#x27;double&#x27;</span>,<span class="string">&#x27;int&#x27;</span>,<span class="string">&#x27;string&#x27;</span>,<span class="string">&#x27;bool&#x27;</span>,<span class="string">&#x27;date&#x27;</span>,<span class="string">&#x27;object&#x27;</span>,<span class="string">&#x27;array&#x27;</span>,<span class="string">&#x27;null&#x27;</span>])</span><br><span class="line"></span><br></pre></td></tr></table></figure><hr><h2><span id="complete-list-of-sql-support">Complete List of SQL Support</span></h2><p>To check out the complete list of SQL Support, visit <a href="featuresForSQL">this link</a>.</p>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL-Query/">SQL Query</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL/">SQL</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/query-mongodb-with-sql/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoBooster 4.0 Released! Query MongoDB with SQL</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-40/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-40/</guid>
      <pubDate>Sun, 20 Aug 2017 05:26:03 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we are extremely pleased to announce the release of MongoBooster 4.0. This major upgrade includes Query MongoDB with SQL, ES7 Async&amp;#x2F;Await support and more.&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;Query-MongoDB-with-SQL&quot;&gt;&lt;a href=&quot;#Query-MongoDB-with-SQL&quot; class=&quot;headerlink&quot; title=&quot;Query MongoDB with SQL&quot;&gt;&lt;/a&gt;Query MongoDB with SQL&lt;/h1&gt;&lt;p&gt;With MongoBooster V4, you can run SQL SELECT Query against MongoDB. SQL support includes functions, expressions, aggregation for collections with nested objects and arrays. &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s look at how to use the GROUP BY clause with the SUM function in SQL.&lt;/p&gt;
&lt;p&gt;Instead of writing the MongoDB query which is represented as a JSON-like structure&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;employees&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;([&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;$group&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$department&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;attr&quot;&gt;total&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$sum&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$salary&amp;quot;&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;])&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;You can query MongoDB by using old SQL which you probably already know&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mb.&lt;span class=&quot;title function_&quot;&gt;runSQLQuery&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  SELECT department, SUM(salary) AS total FROM employees GROUP BY department&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;`&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;Open a shell tab, enter the above script. MongoBooster also offers a &amp;quot;runSQLQuery&amp;quot; code snippets. Just type a snippet prefix &amp;quot;run&amp;quot;, and enter &amp;quot;tab&amp;quot; to insert this snippet, then press &amp;quot;Command-Enter&amp;quot; to execute it and get the result.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.mongobooster.com/s3/img/sql-query-result-tab.png&quot; alt=&quot;Query MongoDB with SQL Result Tab&quot;&gt;&lt;/p&gt;
&lt;p&gt;Just Click on the &amp;quot;console.log&amp;#x2F;print&amp;quot; tab to show the equivalent MongoDB query:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.mongobooster.com/s3/img/sql-query-console-tab.png&quot; alt=&quot;Query MongoDB with SQL Console Tab&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The build-in SQL language service knows all possible completions, SQL functions,  keywords, MongoDB collection names and field names. The IntelliSense suggestions will pop up as you type. You can always manually trigger the auto-complete feature with Ctrl-Shift-Space. &lt;/li&gt;
&lt;li&gt;MongoBooster supports in-place editing in result tree view. Double-click on any value or array element to edit. Pressing shortcut &amp;quot;Esc&amp;quot; will return the previous value and exit the editor.&lt;/li&gt;
&lt;li&gt;If you want the results not to be edited directly, you can enable the &amp;quot;read-only&amp;quot; mode by clicking the lock button in the toolbar.&lt;/li&gt;
&lt;li&gt;SQL features are not natively supported by MongoDB. The SQL query is validated and translated into a MongoDB query and executed by MongoBooster. The Equivalent MongoDB Query can be viewed in console.log tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.mongobooster.com/runSQLQuery&quot;&gt;Click here to learn how to run SQL SELECT Query against MongoDB&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;SQL-Query-Features&quot;&gt;&lt;a href=&quot;#SQL-Query-Features&quot; class=&quot;headerlink&quot; title=&quot;SQL Query Features&quot;&gt;&lt;/a&gt;SQL Query Features&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Access data via SQL including WHERE filters, ORDER BY, GROUP BY, HAVING, DISTINCT, LIMIT			&lt;/li&gt;
&lt;li&gt;SQL Functions (COUNT, SUM, MAX, MIN, AVG)			&lt;/li&gt;
&lt;li&gt;Aggregation Pipeline Operators as SQL Functions (dateToString, toUpper, split, substr...)&lt;/li&gt;
&lt;li&gt;Provide a programming interface (mb.runSQLQuery) that can be integrated into your script&lt;/li&gt;
&lt;li&gt;Autocomplete for keywords, MongoDB collection names, field names and SQL functions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href=&quot;https://www.mongobooster.com/featuresForSQL&quot;&gt;the features and SQL examples&lt;/a&gt; supported by the MongoBooster. &lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we are extremely pleased to announce the release of MongoBooster 4.0. This major upgrade includes Query MongoDB with SQL, ES7 Async&#x2F;Await support and more.</p><p>Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><hr><h1><span id="query-mongodb-with-sql">Query MongoDB with SQL</span></h1><p>With MongoBooster V4, you can run SQL SELECT Query against MongoDB. SQL support includes functions, expressions, aggregation for collections with nested objects and arrays. </p><p>Let&#39;s look at how to use the GROUP BY clause with the SUM function in SQL.</p><p>Instead of writing the MongoDB query which is represented as a JSON-like structure</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">aggregate</span>([</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">$group</span>: &#123;</span><br><span class="line">            <span class="attr">_id</span>: <span class="string">&quot;$department&quot;</span>,</span><br><span class="line">            <span class="attr">total</span>: &#123; <span class="attr">$sum</span>: <span class="string">&quot;$salary&quot;</span> &#125;</span><br><span class="line">        &#125;,</span><br><span class="line">    &#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><p>You can query MongoDB by using old SQL which you probably already know</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">mb.<span class="title function_">runSQLQuery</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">  SELECT department, SUM(salary) AS total FROM employees GROUP BY department</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">`</span>);</span><br></pre></td></tr></table></figure><p>Open a shell tab, enter the above script. MongoBooster also offers a &quot;runSQLQuery&quot; code snippets. Just type a snippet prefix &quot;run&quot;, and enter &quot;tab&quot; to insert this snippet, then press &quot;Command-Enter&quot; to execute it and get the result.</p><p><img src="https://www.mongobooster.com/s3/img/sql-query-result-tab.png" alt="Query MongoDB with SQL Result Tab"></p><p>Just Click on the &quot;console.log&#x2F;print&quot; tab to show the equivalent MongoDB query:</p><p><img src="https://www.mongobooster.com/s3/img/sql-query-console-tab.png" alt="Query MongoDB with SQL Console Tab"></p><ul><li>The build-in SQL language service knows all possible completions, SQL functions,  keywords, MongoDB collection names and field names. The IntelliSense suggestions will pop up as you type. You can always manually trigger the auto-complete feature with Ctrl-Shift-Space. </li><li>MongoBooster supports in-place editing in result tree view. Double-click on any value or array element to edit. Pressing shortcut &quot;Esc&quot; will return the previous value and exit the editor.</li><li>If you want the results not to be edited directly, you can enable the &quot;read-only&quot; mode by clicking the lock button in the toolbar.</li><li>SQL features are not natively supported by MongoDB. The SQL query is validated and translated into a MongoDB query and executed by MongoBooster. The Equivalent MongoDB Query can be viewed in console.log tab.</li></ul><p><a href="https://www.mongobooster.com/runSQLQuery">Click here to learn how to run SQL SELECT Query against MongoDB</a></p><h2><span id="sql-query-features">SQL Query Features</span></h2><ul><li>Access data via SQL including WHERE filters, ORDER BY, GROUP BY, HAVING, DISTINCT, LIMIT</li><li>SQL Functions (COUNT, SUM, MAX, MIN, AVG)</li><li>Aggregation Pipeline Operators as SQL Functions (dateToString, toUpper, split, substr...)</li><li>Provide a programming interface (mb.runSQLQuery) that can be integrated into your script</li><li>Autocomplete for keywords, MongoDB collection names, field names and SQL functions</li></ul><p>See <a href="https://www.mongobooster.com/featuresForSQL">the features and SQL examples</a> supported by the MongoBooster. </p><span id="more"></span><hr><h1><span id="es7-asyncx2fawait-support">ES7 Async&#x2F;Await support</span></h1><p>Within this release, we have also added support for ES7 Async&#x2F;Await in MongoBooster shell.</p><p>For example:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">delay</span>(<span class="params">ms</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve</span>)=&gt;</span> &#123;</span><br><span class="line">        <span class="built_in">setTimeout</span>(resolve, ms);</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">go</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">await</span> <span class="title function_">delay</span>(<span class="number">1000</span>);<span class="comment">//wait 1s</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> db.<span class="property">orders</span>.<span class="title function_">find</span>().<span class="title function_">limit</span>(<span class="number">5</span>); </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title function_">go</span>();</span><br></pre></td></tr></table></figure><p>As a comparison， MongoBooster has a build-in function await which is a common js method, not a keyword. It can await a promise or a promise array. Note this await function is different from es7 await, this await function may be used in functions without the async keyword marked.</p><p>The above example can be written with the MongoBooster await function.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">delay</span>(<span class="params">ms</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve</span>)=&gt;</span> &#123;</span><br><span class="line">        <span class="built_in">setTimeout</span>(resolve, ms);</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title function_">await</span>(<span class="title function_">delay</span>(<span class="number">1000</span>));</span><br><span class="line"></span><br><span class="line">db.<span class="property">orders</span>.<span class="title function_">find</span>().<span class="title function_">limit</span>(<span class="number">5</span>);</span><br></pre></td></tr></table></figure><hr><h1><span id="intellisense-for-nodejs-required-packages">Intellisense for Node.js Required Packages</span></h1><p>Within this release, MongoBooster also offers Intellisense experience for Node.js required packages. The IntelliSense suggestions will pop up as you type and automatically complete Javascript method names, variables, etc. You can always manually trigger it with Ctrl-Shift-Space. Out of the box, Ctrl-Space, Alt-Space are acceptable triggers.</p><p>For example:</p><p><img src="https://www.mongobooster.com/s3/img/autocomplete-js-module.png" alt="Intellisense for Node.js Required Packages"></p><p><a href="https://www.mongobooster.com/useNodeModule">Click here to learn how to use Node.js Modules in Your Script</a></p><hr><h1><span id="minor-enhancement">Minor Enhancement</span></h1><h2><span id="more-useful-mongodb-shell-extensions">More Useful MongoDB Shell Extensions</span></h2><h3><span id="global-fetch-method">Global fetch() method</span></h3><p>MongoBooser integrates <a href="https://github.com/bitinn/node-fetch">node-fetch</a> to bring window.fetch to MongoDB Script.</p><p>Global scope: <strong>fetch</strong></p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">await</span>(<span class="title function_">await</span>(<span class="title function_">fetch</span>(<span class="string">&#x27;https://github.com&#x27;</span>)).<span class="title function_">text</span>()));</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">await</span>(<span class="title function_">await</span>(<span class="title function_">fetch</span>(<span class="string">&#x27;https://api.github.com/users/github&#x27;</span>)).<span class="title function_">json</span>()));</span><br></pre></td></tr></table></figure><hr><h3><span id="cursornot-method">cursor.not() method</span></h3><p>The <a href="https://docs.mongodb.com/manual/reference/operator/query/not/">cursor.not(operator-expression)</a> method  performs a logical NOT operation on the specified &quot;operator-expression&quot; and selects the documents that do not match the &quot;operator-expression&quot;. This includes documents that do not contain the field.</p><p>Consider the following example which uses the pattern match expression &#x2F;&#x2F;:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">inventory</span>.<span class="title function_">where</span>(<span class="string">&quot;item&quot;</span>).<span class="title function_">not</span>(<span class="regexp">/^p.*/</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">//the equavalent MongoDB JSON-like Query </span></span><br><span class="line"></span><br><span class="line">db.<span class="property">inventory</span>.<span class="title function_">find</span>( &#123; <span class="attr">item</span>: &#123; <span class="attr">$not</span>: <span class="regexp">/^p.*/</span> &#125; &#125; )</span><br></pre></td></tr></table></figure><p>The query will select all documents in the inventory collection where the item field value does not start with the letter p.</p><hr><h3><span id="cursortype-method">cursor.type() method</span></h3><p>The <a href="https://docs.mongodb.com/manual/reference/operator/query/type/">cursor.type( BSON type number | String alias )</a> method selects the documents where the value of the field is an instance of the specified BSON type. Querying by data type is useful when dealing with highly unstructured data where data types are not predictable.</p><p>The following queries return all documents where zipCode is the BSON type string:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">addressBook</span>.<span class="title function_">where</span>(<span class="string">&quot;zipCode&quot;</span>).<span class="title function_">type</span>(<span class="number">2</span>);</span><br><span class="line">db.<span class="property">addressBook</span>.<span class="title function_">where</span>(<span class="string">&quot;zipCode&quot;</span>).<span class="title function_">type</span>(<span class="string">&quot;string&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">//the equavalent MongoDB JSON-like Query </span></span><br><span class="line"></span><br><span class="line">db.<span class="property">addressBook</span>.<span class="title function_">find</span>( &#123; <span class="string">&quot;zipCode&quot;</span> : &#123; $type : <span class="number">2</span> &#125; &#125; );</span><br><span class="line">db.<span class="property">addressBook</span>.<span class="title function_">find</span>( &#123; <span class="string">&quot;zipCode&quot;</span> : &#123; $type : <span class="string">&quot;string&quot;</span> &#125; &#125; );</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><a href="https://docs.mongodb.com/manual/reference/operator/query/type/#available-types">Click here</a> to view Available BSON Types</p><hr><h2><span id="group-history-scripts-by-date">Group History Scripts by Date</span></h2><p>In the previous version, only up to 30 scripts can be saved. We got feedback from users, they say this value is too small. In the new version, we allow to save up to 1000 history scripts. Histrory entries can be grouped by date, which is easier to retrieve and query.</p><p><img src="https://www.mongobooster.com/s3/img/history-scripts-groupby-date.png" alt="Group history Scripts by Date"></p><hr><h2><span id="hidex2fshow-system-objects-in-object-explorer">Hide&#x2F;Show System Objects in Object Explorer</span></h2><p>The Databases node of Object Explorer contains system objects such as the admin databases. To hide system objects in Object Explorer</p><ol><li>Click Options Menu</li><li>Click Explorer&#x2F;Connection Tree </li><li>Toggle &quot;Show System Object&quot;  on&#x2F;off to hide&#x2F;show system object</li></ol><p>This change will take effect immediately.</p><hr><h1><span id="bugfix-and-other-improvements">Bugfix and other improvements</span></h1><ul><li>Added, Menu -&gt; Options-&gt; Options That May Affect Performance -&gt; Enable Fields&#x2F;Collection Auto Complete, default value:true</li><li>Added, Menu -&gt; Options-&gt; Output panel -&gt; Result JSON View Format -&gt; Show Int32 as NumberInt(&quot;xxx&quot;), default value:false</li><li>Added, a new SSH config option to ask for SSH password each time</li><li>Improved, adjust sub-items of options menu </li><li>Improved, enable &quot;Query by example&quot; action for AggregationCursor</li><li>Improved, enable in-place-edit feature for AggregationCursor</li><li>Improved, SSL connection configuration</li><li>Fixed, Try finally connection close issue in discovering ReplicaSet action</li></ul><hr><h1><span id="hotfix">Hotfix</span></h1><h2><span id="hotfix-in-mongobooster-402">Hotfix in MongoBooster 4.0.2</span></h2><ul><li>Added, add &quot;stop script&quot;, &quot;pause log&quot; and &quot;clear-log&quot; buttons to the run-time log dialog.</li><li>Fixed, SQL Query assert &quot;failed : no shortName&quot; when the collection name can not be used as a JavaScript variable name.</li><li>Improved,  Linux: Add category entry &quot;Development&quot; to the *.desktop file.</li><li>Improved,  Limit the maximum number of the run-tim log records to 10,000.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/SQL-Query/">SQL Query</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/esnext/">esnext</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Intellisense/">Intellisense</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-40/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Using  node modules in MongoBooster</title>
      <link>https://www.nosqlbooster.com/blog/using-node-modules/</link>
      <guid>https://www.nosqlbooster.com/blog/using-node-modules/</guid>
      <pubDate>Wed, 12 Apr 2017 02:59:26 GMT</pubDate>
      
      <description>&lt;h2 id=&quot;Question&quot;&gt;&lt;a href=&quot;#Question&quot; class=&quot;headerlink&quot; title=&quot;Question:&quot;&gt;&lt;/a&gt;Question:&lt;/h2&gt;&lt;p&gt;Can I use node modules in MongoBooster? I want to use&lt;a href=&quot;https://github.com/mzabriskie/axios&quot;&gt; axios&lt;/a&gt; in my script. And, Do I have to install node module globally?&lt;/p&gt;
&lt;h2 id=&quot;Answer&quot;&gt;&lt;a href=&quot;#Answer&quot; class=&quot;headerlink&quot; title=&quot;Answer:&quot;&gt;&lt;/a&gt;Answer:&lt;/h2&gt;&lt;p&gt;Yes, You can use pure JS node modules in MongoBooster. And, you don&amp;#39;t need to install node modules globally. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Launch MongoBooster.&lt;/li&gt;
&lt;li&gt;Execute Main Menu -&amp;gt; Help -&amp;gt; &lt;code&gt;Open the Executable Directory&lt;/code&gt; (or &amp;quot;Open User Data Directory&amp;quot; in the old version)&lt;/li&gt;
&lt;li&gt;New Terminal at this folder&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;npm i axios  &lt;span class=&quot;comment&quot;&gt;# run it in MongoBooster user data directory&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;After successfully installing this package in the MongoBooster User Data Directory, you can require and access it in the MongoBooster script.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; axios=&lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;axios&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;let&lt;/span&gt; rst=&lt;span class=&quot;title function_&quot;&gt;await&lt;/span&gt; (axios.&lt;span class=&quot;title function_&quot;&gt;get&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;https://api.github.com/users/github&amp;#x27;&lt;/span&gt;));&lt;span class=&quot;comment&quot;&gt;//await promise The &amp;quot;await&amp;quot; is a build-in method in MongoBooster. refer to: https://www.mongobooster.com/blog/using-functions-with-async-callback&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;variable language_&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;log&lt;/span&gt;(rst.&lt;span class=&quot;property&quot;&gt;data&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<h2><span id="question">Question:</span></h2><p>Can I use node modules in MongoBooster? I want to use<a href="https://github.com/mzabriskie/axios"> axios</a> in my script. And, Do I have to install node module globally?</p><h2><span id="answer">Answer:</span></h2><p>Yes, You can use pure JS node modules in MongoBooster. And, you don&#39;t need to install node modules globally. </p><ol><li>Launch MongoBooster.</li><li>Execute Main Menu -&gt; Help -&gt; <code>Open the Executable Directory</code> (or &quot;Open User Data Directory&quot; in the old version)</li><li>New Terminal at this folder</li></ol><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i axios  <span class="comment"># run it in MongoBooster user data directory</span></span><br></pre></td></tr></table></figure><p>After successfully installing this package in the MongoBooster User Data Directory, you can require and access it in the MongoBooster script.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> axios=<span class="built_in">require</span>(<span class="string">&quot;axios&quot;</span>);</span><br><span class="line"><span class="keyword">let</span> rst=<span class="title function_">await</span> (axios.<span class="title function_">get</span>(<span class="string">&#x27;https://api.github.com/users/github&#x27;</span>));<span class="comment">//await promise The &quot;await&quot; is a build-in method in MongoBooster. refer to: https://www.mongobooster.com/blog/using-functions-with-async-callback</span></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(rst.<span class="property">data</span>);</span><br></pre></td></tr></table></figure><span id="more"></span> <p>The <a href="https://www.mongobooster.com/blog/using-functions-with-async-callback">&quot;await&quot; is a build-in method</a> in MongoBooster. You can use it to await a promise or a promise array. </p><p>Run it and got result.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="string">&quot;avatar_url&quot;</span> : <span class="string">&quot;https://avatars2.githubusercontent.com/u/9919?v=3&quot;</span>,</span><br><span class="line">    <span class="string">&quot;bio&quot;</span> : <span class="string">&quot;How people build software.&quot;</span>,</span><br><span class="line">    <span class="string">&quot;blog&quot;</span> : <span class="string">&quot;https://github.com/about&quot;</span>,</span><br><span class="line">    <span class="string">&quot;company&quot;</span> : <span class="literal">null</span>,</span><br><span class="line">    <span class="string">&quot;created_at&quot;</span> : <span class="string">&quot;2008-05-11T04:37:31Z&quot;</span>,</span><br><span class="line"> ...</span><br><span class="line"> ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h4><span id="use-your-own-javascript-files">Use your own javascript files</span></h4><p>NoSQLBooster supports <a href="https://nodejs.org/api/modules.html#modules-commonjs-modules">CommonJS module</a>, each file is treated as a separate module. For example, consider a file named &quot;c:&#x2F;&#x2F;test&#x2F;myproject&#x2F;utils.js&quot;</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">c</span>:<span class="comment">//test/myproject/utils.js</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">replaceStr</span> = (<span class="params">str, char, replacer</span>) =&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> regex = <span class="keyword">new</span> <span class="title class_">RegExp</span>(char, <span class="string">&quot;g&quot;</span>)</span><br><span class="line">  <span class="keyword">const</span> replaced = str.<span class="title function_">replace</span>(regex, replacer)</span><br><span class="line">  <span class="keyword">return</span> replaced</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">exports</span>.<span class="property">replaceStr</span> =  replaceStr;</span><br></pre></td></tr></table></figure><p>then import &quot;c:&#x2F;&#x2F;test&#x2F;myproject&#x2F;utils.js&quot; in your script.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> &#123;replaceStr&#125;= <span class="built_in">require</span>(<span class="string">&quot;c://test/myproject/utils.js&quot;</span>);</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">replaceStr</span>(<span class="string">&quot;hello world&quot;</span>,<span class="string">&quot;world&quot;</span>,<span class="string">&quot;nosqlbooster&quot;</span>));  <span class="comment">//hello nosqlbooster</span></span><br></pre></td></tr></table></figure><p>Now, you can assemble packages like building blocks in your MongoDB shell script. The npm registry hosts almost half a million packages of free, reusable code — the largest software registry in the world.</p>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Shell-Extensions/">Shell Extensions</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/esnext/">esnext</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/using-node-modules/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Using functions with async callback</title>
      <link>https://www.nosqlbooster.com/blog/using-functions-with-async-callback/</link>
      <guid>https://www.nosqlbooster.com/blog/using-functions-with-async-callback/</guid>
      <pubDate>Sat, 01 Apr 2017 01:20:40 GMT</pubDate>
      
      <description>&lt;h2 id=&quot;Question&quot;&gt;&lt;a href=&quot;#Question&quot; class=&quot;headerlink&quot; title=&quot;Question:&quot;&gt;&lt;/a&gt;Question:&lt;/h2&gt;&lt;p&gt;We&amp;#39;re having a situation where we want to call a function with an async callback. The issue that arises is that the script thread terminates before the callback is executed. Is there any way to prevent the script thread from terminating before we get the callback?&lt;/p&gt;
&lt;p&gt;Background:&lt;/p&gt;
&lt;p&gt;We&amp;#39;re intending to read a collection containing phone numbers, call Twilio Api (an sms service) to send a message, and finally store the status from Twilio into another collection.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;users&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;...&amp;#125;).&lt;span class=&quot;title function_&quot;&gt;forEach&lt;/span&gt;(&lt;span class=&quot;function&quot;&gt;(&lt;span class=&quot;params&quot;&gt;user&lt;/span&gt;) =&amp;gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;title function_&quot;&gt;sendSms&lt;/span&gt;(user.&lt;span class=&quot;property&quot;&gt;phone&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;A short message&amp;quot;&lt;/span&gt;, &lt;span class=&quot;function&quot;&gt;(&lt;span class=&quot;params&quot;&gt;status&lt;/span&gt;) =&amp;gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    db.&lt;span class=&quot;property&quot;&gt;smsDeliveries&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insert&lt;/span&gt;(status);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h2 id=&quot;Answer&quot;&gt;&lt;a href=&quot;#Answer&quot; class=&quot;headerlink&quot; title=&quot;Answer:&quot;&gt;&lt;/a&gt;Answer:&lt;/h2&gt;&lt;p&gt;MongoBooster has a build-in function await (It&amp;#39;s a common js method, not a keyword). It can await a promise or a promise array.&amp;nbsp;Note this await function is different from es7 await, this await function may be used in functions &lt;strong&gt;without&lt;/strong&gt; the &lt;strong&gt;async&lt;/strong&gt; keyword&amp;nbsp;marked.&lt;/p&gt;
&lt;p&gt;Please try the following code:&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;title function_&quot;&gt;sendSmsAsync&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;phone, message&lt;/span&gt;)&amp;#123; &lt;span class=&quot;comment&quot;&gt;//promisify sendSms&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;title class_&quot;&gt;Promise&lt;/span&gt;(&lt;span class=&quot;function&quot;&gt;(&lt;span class=&quot;params&quot;&gt;resolve, reject&lt;/span&gt;)=&amp;gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;title function_&quot;&gt;sendSms&lt;/span&gt;(phone, message, &lt;span class=&quot;function&quot;&gt;(&lt;span class=&quot;params&quot;&gt;status&lt;/span&gt;)=&amp;gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;title function_&quot;&gt;resolve&lt;/span&gt;(status)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;users&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&amp;#125;).&lt;span class=&quot;title function_&quot;&gt;forEach&lt;/span&gt;(&lt;span class=&quot;function&quot;&gt;(&lt;span class=&quot;params&quot;&gt;user&lt;/span&gt;) =&amp;gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;let&lt;/span&gt; status=&lt;span class=&quot;title function_&quot;&gt;await&lt;/span&gt;(&lt;span class=&quot;title function_&quot;&gt;sendSmsAsync&lt;/span&gt;(user.&lt;span class=&quot;property&quot;&gt;phone&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;A short message&amp;quot;&lt;/span&gt;)); &lt;span class=&quot;comment&quot;&gt;//await a promise&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   db.&lt;span class=&quot;property&quot;&gt;smsDeliveries&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insert&lt;/span&gt;(&amp;#123;status&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<h2><span id="question">Question:</span></h2><p>We&#39;re having a situation where we want to call a function with an async callback. The issue that arises is that the script thread terminates before the callback is executed. Is there any way to prevent the script thread from terminating before we get the callback?</p><p>Background:</p><p>We&#39;re intending to read a collection containing phone numbers, call Twilio Api (an sms service) to send a message, and finally store the status from Twilio into another collection.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">users</span>.<span class="title function_">find</span>(&#123;...&#125;).<span class="title function_">forEach</span>(<span class="function">(<span class="params">user</span>) =&gt;</span> &#123;</span><br><span class="line">  <span class="title function_">sendSms</span>(user.<span class="property">phone</span>, <span class="string">&quot;A short message&quot;</span>, <span class="function">(<span class="params">status</span>) =&gt;</span> &#123;</span><br><span class="line">    db.<span class="property">smsDeliveries</span>.<span class="title function_">insert</span>(status);</span><br><span class="line">  &#125;);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><h2><span id="answer">Answer:</span></h2><p>MongoBooster has a build-in function await (It&#39;s a common js method, not a keyword). It can await a promise or a promise array.&nbsp;Note this await function is different from es7 await, this await function may be used in functions <strong>without</strong> the <strong>async</strong> keyword&nbsp;marked.</p><p>Please try the following code:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">sendSmsAsync</span>(<span class="params">phone, message</span>)&#123; <span class="comment">//promisify sendSms</span></span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>)=&gt;</span> &#123;</span><br><span class="line">            <span class="title function_">sendSms</span>(phone, message, <span class="function">(<span class="params">status</span>)=&gt;</span>&#123;</span><br><span class="line">                <span class="title function_">resolve</span>(status)</span><br><span class="line">            &#125;)</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">db.<span class="property">users</span>.<span class="title function_">find</span>(&#123;&#125;).<span class="title function_">forEach</span>(<span class="function">(<span class="params">user</span>) =&gt;</span> &#123;</span><br><span class="line">   <span class="keyword">let</span> status=<span class="title function_">await</span>(<span class="title function_">sendSmsAsync</span>(user.<span class="property">phone</span>, <span class="string">&quot;A short message&quot;</span>)); <span class="comment">//await a promise</span></span><br><span class="line">   db.<span class="property">smsDeliveries</span>.<span class="title function_">insert</span>(&#123;status&#125;);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><span id="more"></span>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/esnext/">esnext</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/using-functions-with-async-callback/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoBooster 3.5 is out, AppImages, Azure DocumentDB</title>
      <link>https://www.nosqlbooster.com/blog/mongobooster-35-appimages-azure-documentdb/</link>
      <guid>https://www.nosqlbooster.com/blog/mongobooster-35-appimages-azure-documentdb/</guid>
      <pubDate>Wed, 01 Mar 2017 05:54:31 GMT</pubDate>
      
      <description>&lt;p&gt;So happy to release MongoBooster 3.5 today. This version distributes Linux application in the AppImage format, add Azure DocumentDB support along with some useful minor improvements and bugfix.&lt;/p&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-5-7&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-5-7&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.5.7&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.5.7&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;improved: SSH connection config UI&lt;/li&gt;
&lt;li&gt;fixed: a &amp;quot;use db&amp;quot; bug in copying collection&lt;/li&gt;
&lt;li&gt;fixed: missing &amp;quot;,&amp;quot; issue when exporting collection to MySQL as SQL format&lt;/li&gt;
&lt;li&gt;fixed: throw subCollection.getCollection is not a function error while executing script &amp;quot;db.getCollection(&amp;quot;xxxx.group.xxxx&amp;quot;).find({})&amp;quot;&lt;/li&gt;
&lt;li&gt;fixed: A Javascript JSON.parse error occurred in the main process while reading &amp;quot;window-state-main.json&amp;quot;&lt;/li&gt;
&lt;li&gt;fixed: connection close issue when calling discoverReplicaSet&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-5-6&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-5-6&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.5.6&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.5.6&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;added: Short cut &amp;quot;Mod+0&amp;quot; - &amp;quot;toggle Output Panel&amp;quot; to maximize the script editor.&lt;/li&gt;
&lt;li&gt;added: Short cut &amp;quot;Mod+9&amp;quot; - &amp;quot;toggle Editor Panel&amp;quot; to maximize the output panel.&lt;/li&gt;
&lt;li&gt;improved:  Update node version to 7.4.0&lt;/li&gt;
&lt;li&gt;fixed:  Create new shell tab button is not visible in dark theme&lt;/li&gt;
&lt;li&gt;fixed:  Missing icons in dark theme&lt;/li&gt;
&lt;li&gt;fixed: 	Can see HTML  source in Replica Set Members header&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-5-5&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-5-5&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.5.5&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.5.5&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed: should not sort by property name on a getIndex&lt;/li&gt;
&lt;li&gt;fixed: &amp;quot;Query by example&amp;quot; doesn&amp;#39;t work with nested array&lt;/li&gt;
&lt;li&gt;fixed:  can&amp;#39;t add double&amp;#x2F;integer value into the nested array.&lt;/li&gt;
&lt;li&gt;fixed: import JSON file which only contain single JSON object doesn&amp;#39;t work.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-5-4&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-5-4&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.5.4&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.5.4&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed: shell tab can&amp;#39;t be closed when the tab name includes space char.&lt;/li&gt;
&lt;li&gt;fixed: mongotools 3.4.2 compatibility issue&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-5-3&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-5-3&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.5.3&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.5.3&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed: Kerberos Library is not installed issue.&lt;/li&gt;
&lt;li&gt;fixed: database with name &amp;quot;&amp;lt;DATABASE&amp;gt;&amp;quot; maked problems&lt;/li&gt;
&lt;li&gt;improved: add bluebird Promise typings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-5-2&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-5-2&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.5.2&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.5.2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fixed:  Error connecting to Mongodb Atlas replicaset.&lt;/li&gt;
&lt;li&gt;improved:Upgrade MongoDB driver to the latest version 2.2.24&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Linux-AppImage-format&quot;&gt;&lt;a href=&quot;#Linux-AppImage-format&quot; class=&quot;headerlink&quot; title=&quot;Linux AppImage format&quot;&gt;&lt;/a&gt;Linux AppImage format&lt;/h2&gt;&lt;p&gt;This version packages desktop applications as &lt;a href=&quot;http://appimage.org/&quot;&gt;AppImages&lt;/a&gt; that run on common Linux-based operating systems, such as RHEL, CentOS, Ubuntu, Fedora, debian and derivatives. An AppImage is a downloadable file for Linux that contains an application and everything the application needs to run (e.g., libraries, icons, fonts, translations, etc.) that cannot be reasonably expected to be part of each target system.&lt;/p&gt;
&lt;p&gt;To run an AppImage, simply:&lt;/p&gt;
&lt;p&gt;Make it executable&lt;/p&gt;
&lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ &lt;span class=&quot;built_in&quot;&gt;chmod&lt;/span&gt; a+x mongobooster*.AppImage&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;and run!&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>So happy to release MongoBooster 3.5 today. This version distributes Linux application in the AppImage format, add Azure DocumentDB support along with some useful minor improvements and bugfix.</p><h2><span id="hotfix-in-mongobooster-357">Hotfix in MongoBooster 3.5.7</span></h2><ul><li>improved: SSH connection config UI</li><li>fixed: a &quot;use db&quot; bug in copying collection</li><li>fixed: missing &quot;,&quot; issue when exporting collection to MySQL as SQL format</li><li>fixed: throw subCollection.getCollection is not a function error while executing script &quot;db.getCollection(&quot;xxxx.group.xxxx&quot;).find({})&quot;</li><li>fixed: A Javascript JSON.parse error occurred in the main process while reading &quot;window-state-main.json&quot;</li><li>fixed: connection close issue when calling discoverReplicaSet</li></ul><h2><span id="hotfix-in-mongobooster-356">Hotfix in MongoBooster 3.5.6</span></h2><ul><li>added: Short cut &quot;Mod+0&quot; - &quot;toggle Output Panel&quot; to maximize the script editor.</li><li>added: Short cut &quot;Mod+9&quot; - &quot;toggle Editor Panel&quot; to maximize the output panel.</li><li>improved:  Update node version to 7.4.0</li><li>fixed:  Create new shell tab button is not visible in dark theme</li><li>fixed:  Missing icons in dark theme</li><li>fixed: Can see HTML  source in Replica Set Members header</li></ul><h2><span id="hotfix-in-mongobooster-355">Hotfix in MongoBooster 3.5.5</span></h2><ul><li>fixed: should not sort by property name on a getIndex</li><li>fixed: &quot;Query by example&quot; doesn&#39;t work with nested array</li><li>fixed:  can&#39;t add double&#x2F;integer value into the nested array.</li><li>fixed: import JSON file which only contain single JSON object doesn&#39;t work.</li></ul><h2><span id="hotfix-in-mongobooster-354">Hotfix in MongoBooster 3.5.4</span></h2><ul><li>fixed: shell tab can&#39;t be closed when the tab name includes space char.</li><li>fixed: mongotools 3.4.2 compatibility issue</li></ul><h2><span id="hotfix-in-mongobooster-353">Hotfix in MongoBooster 3.5.3</span></h2><ul><li>fixed: Kerberos Library is not installed issue.</li><li>fixed: database with name &quot;&lt;DATABASE&gt;&quot; maked problems</li><li>improved: add bluebird Promise typings</li></ul><h2><span id="hotfix-in-mongobooster-352">Hotfix in MongoBooster 3.5.2</span></h2><ul><li>fixed:  Error connecting to Mongodb Atlas replicaset.</li><li>improved:Upgrade MongoDB driver to the latest version 2.2.24</li></ul><h2><span id="linux-appimage-format">Linux AppImage format</span></h2><p>This version packages desktop applications as <a href="http://appimage.org/">AppImages</a> that run on common Linux-based operating systems, such as RHEL, CentOS, Ubuntu, Fedora, debian and derivatives. An AppImage is a downloadable file for Linux that contains an application and everything the application needs to run (e.g., libraries, icons, fonts, translations, etc.) that cannot be reasonably expected to be part of each target system.</p><p>To run an AppImage, simply:</p><p>Make it executable</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">chmod</span> a+x mongobooster*.AppImage</span><br></pre></td></tr></table></figure><p>and run!</p><span id="more"></span> <h2><span id="azure-documentdb-support">Azure DocumentDB Support</span></h2><p>Microsoft’s NoSQL document database service <a href="https://docs.microsoft.com/en-us/azure/documentdb/documentdb-protocol-mongodb">DocumentDB now supports drivers for MongoDB</a>. So if you were using existing MongoDB tools and libraries, you can now use them with DocumentDB and take advantage of Microsoft’s cloud architecture. We have tested the MongoBooster with DocumentDB. It works well.</p><h2><span id="minor-ui-improvements">Minor UI Improvements</span></h2><h3><span id="hold-shift-key-to-bypass-auto-exec">Hold SHIFT key to bypass auto-exec</span></h3><p>This version added a new handy &quot;Hold SHIFT key to bypass auto-exec ...&quot; collection action to disable automatic execution when opening a large collection..</p><p><img src="https://www.mongobooster.com/s3/img/hold-shift-bypass-auto-exec.png" alt="MongoBooster Hold Shift bypass auto-exec"></p><h3><span id="save-shell-history-log-to-file">Save shell history log to file</span></h3><p>This version also added a &quot;save to file&quot; button to shell log window to export shell log.</p><p><img src="https://www.mongobooster.com/s3/img/shell-log-save-button.png" alt="MongoBooster Shell log save button"></p><h1><span id="minor-improvements-amp-bugfix">Minor Improvements &amp; Bugfix</span></h1><ul><li>Fixed, Missing add icon in the dark theme.</li><li>Fixed,URI option not saving when add the <code>authMechanism</code> custom URI option</li><li>Improved,remove some code template&#39;s redundant comment.</li><li>Improved, update dependencies</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Linux/">Linux</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Azure/">Azure</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/mongobooster-35-appimages-azure-documentdb/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoBooster 3.3 is out</title>
      <link>https://www.nosqlbooster.com/blog/mongobooster-33-is-out/</link>
      <guid>https://www.nosqlbooster.com/blog/mongobooster-33-is-out/</guid>
      <pubDate>Mon, 23 Jan 2017 00:26:41 GMT</pubDate>
      
      <description>&lt;p&gt;So happy to release MongoBooster 3.3 today. This version includes a few useful shell script extensions (cursor.getShellScript, cursor.saveAsView...) along with some useful minor improvements and bugfix.&lt;/p&gt;
&lt;h1 id=&quot;shell-script-extensions&quot;&gt;&lt;a href=&quot;#shell-script-extensions&quot; class=&quot;headerlink&quot; title=&quot;shell script extensions&quot;&gt;&lt;/a&gt;shell script extensions&lt;/h1&gt;&lt;h3 id=&quot;cursor-getShellScript&quot;&gt;&lt;a href=&quot;#cursor-getShellScript&quot; class=&quot;headerlink&quot; title=&quot;cursor.getShellScript()&quot;&gt;&lt;/a&gt;cursor.getShellScript()&lt;/h3&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Cursor.getShellScript()&lt;/strong&gt;&lt;/em&gt; method return the MongoDB find shell script produced by the MongoBooster Fluent Query Builder.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;Run the following Fluent query script in MongoBooster:&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;age&amp;#x27;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;gte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;lte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;65&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;select&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;name age -_id&amp;#x27;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;-age name&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;limit&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;skip&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;getShellScript&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;We got the following MongoDB shell find script&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt; : &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&amp;quot;$gte&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&amp;quot;$lte&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;65&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;, &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&amp;quot;_id&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&amp;#123;  &lt;span class=&quot;string&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt; : -&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,  &lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt; : &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;limit&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       .&lt;span class=&quot;title function_&quot;&gt;skip&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>So happy to release MongoBooster 3.3 today. This version includes a few useful shell script extensions (cursor.getShellScript, cursor.saveAsView...) along with some useful minor improvements and bugfix.</p><h1><span id="shell-script-extensions">shell script extensions</span></h1><h3><span id="cursorgetshellscript">cursor.getShellScript()</span></h3><p><em><strong>Cursor.getShellScript()</strong></em> method return the MongoDB find shell script produced by the MongoBooster Fluent Query Builder.</p><p>For example:</p><p>Run the following Fluent query script in MongoBooster:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">user</span>.<span class="title function_">where</span>(<span class="string">&#x27;age&#x27;</span>).<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>)</span><br><span class="line">       .<span class="title function_">select</span>(<span class="string">&#x27;name age -_id&#x27;</span>)</span><br><span class="line">       .<span class="title function_">sort</span>(<span class="string">&quot;-age name&quot;</span>)</span><br><span class="line">       .<span class="title function_">limit</span>(<span class="number">5</span>)</span><br><span class="line">       .<span class="title function_">skip</span>(<span class="number">100</span>)</span><br><span class="line">       .<span class="title function_">getShellScript</span>()</span><br></pre></td></tr></table></figure><p>We got the following MongoDB shell find script</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">user</span>.<span class="title function_">find</span>(&#123;</span><br><span class="line">            <span class="string">&quot;age&quot;</span> : &#123;</span><br><span class="line">                <span class="string">&quot;$gte&quot;</span> : <span class="number">18</span>,</span><br><span class="line">                <span class="string">&quot;$lte&quot;</span> : <span class="number">65</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;, &#123;</span><br><span class="line">            <span class="string">&quot;name&quot;</span> : <span class="number">1</span>,</span><br><span class="line">            <span class="string">&quot;age&quot;</span> : <span class="number">1</span>,</span><br><span class="line">            <span class="string">&quot;_id&quot;</span> : <span class="number">0</span></span><br><span class="line">        &#125;)</span><br><span class="line">       .<span class="title function_">sort</span>(&#123;  <span class="string">&quot;age&quot;</span> : -<span class="number">1</span>,  <span class="string">&quot;name&quot;</span> : <span class="number">1</span> &#125;)</span><br><span class="line">       .<span class="title function_">limit</span>(<span class="number">5</span>)</span><br><span class="line">       .<span class="title function_">skip</span>(<span class="number">100</span>)</span><br></pre></td></tr></table></figure><span id="more"></span> <p>Run the following aggregate Fluent Query script in MongoBooster:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">companies</span>.<span class="title function_">aggregate</span>(qb.<span class="title function_">where</span>(<span class="string">&#x27;founded_year&#x27;</span>).<span class="title function_">gte</span>(<span class="number">2000</span>).<span class="title function_">lte</span>(<span class="number">2010</span>))</span><br><span class="line">            .<span class="title function_">group</span>(&#123;<span class="attr">_id</span>:<span class="string">&quot;$category_code&quot;</span>,<span class="attr">count</span>:&#123;<span class="attr">$sum</span>:<span class="number">1</span>&#125;&#125;)</span><br><span class="line">            .<span class="title function_">sort</span>(<span class="string">&#x27;-count&#x27;</span>)</span><br><span class="line">            .<span class="title function_">skip</span>(<span class="number">100</span>)</span><br><span class="line">            .<span class="title function_">limit</span>(<span class="number">5</span>)</span><br><span class="line">            .<span class="title function_">getShellScript</span>()</span><br></pre></td></tr></table></figure><p>We got the MongoDB shell aggregate script :</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">companies</span>.<span class="title function_">aggregate</span>(</span><br><span class="line">[</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$match&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;founded_year&quot;</span> : &#123;</span><br><span class="line">                <span class="string">&quot;$gte&quot;</span> : <span class="number">2000</span>,</span><br><span class="line">                <span class="string">&quot;$lte&quot;</span> : <span class="number">2010</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$group&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;_id&quot;</span> : <span class="string">&quot;$category_code&quot;</span>,</span><br><span class="line">            <span class="string">&quot;count&quot;</span> : &#123;</span><br><span class="line">                <span class="string">&quot;$sum&quot;</span> : <span class="number">1</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$sort&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;count&quot;</span> : -<span class="number">1</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$skip&quot;</span> : <span class="number">100</span></span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$limit&quot;</span> : <span class="number">5</span></span><br><span class="line">    &#125;</span><br><span class="line">])</span><br></pre></td></tr></table></figure><h3><span id="cursorsaveasview">cursor.saveAsView()</span></h3><p>Cursor.saveAsView() save find&#x2F;aggregate cursor as a MongoDB readonly view. The method requires MongoDB 3.4 and above.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">user</span>.<span class="title function_">where</span>(<span class="string">&#x27;age&#x27;</span>).<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>)</span><br><span class="line">       .<span class="title function_">select</span>(<span class="string">&#x27;name age -_id&#x27;</span>)</span><br><span class="line">       .<span class="title function_">sort</span>(<span class="string">&quot;-age name&quot;</span>)</span><br><span class="line">       .<span class="title function_">limit</span>(<span class="number">5</span>)</span><br><span class="line">       .<span class="title function_">skip</span>(<span class="number">100</span>)</span><br><span class="line">       .<span class="title function_">saveAsView</span>(<span class="string">&quot;user_view&quot;</span>, &#123;<span class="attr">dropIfExists</span>:<span class="literal">true</span>&#125;) <span class="comment">//drop view if it exists.</span></span><br><span class="line"></span><br><span class="line">db.<span class="property">companies</span>.<span class="title function_">aggregate</span>(qb.<span class="title function_">where</span>(<span class="string">&#x27;founded_year&#x27;</span>).<span class="title function_">gte</span>(<span class="number">2000</span>).<span class="title function_">lte</span>(<span class="number">2010</span>))</span><br><span class="line">            .<span class="title function_">group</span>(&#123;<span class="attr">_id</span>:<span class="string">&quot;$category_code&quot;</span>,<span class="attr">count</span>:&#123;<span class="attr">$sum</span>:<span class="number">1</span>&#125;&#125;)</span><br><span class="line">            .<span class="title function_">sort</span>(<span class="string">&#x27;-count&#x27;</span>)</span><br><span class="line">            .<span class="title function_">skip</span>(<span class="number">100</span>)</span><br><span class="line">            .<span class="title function_">limit</span>(<span class="number">5</span>)</span><br><span class="line">            .<span class="title function_">saveAsView</span>(<span class="string">&quot;companies_view&quot;</span>, &#123;<span class="attr">dropIfExists</span>:<span class="literal">true</span>&#125;) <span class="comment">//drop view if it exists.</span></span><br></pre></td></tr></table></figure><h3><span id="cursorgetaggregationpipeline">cursor.getAggregationPipeline()</span></h3><p>Cursor.getAggregationPipeline() return the aggregation pipeline produced by the MongoBooster Fluent Query Builder..</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">user</span>.<span class="title function_">where</span>(<span class="string">&#x27;age&#x27;</span>).<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>)</span><br><span class="line">       .<span class="title function_">select</span>(<span class="string">&#x27;name age -_id&#x27;</span>)</span><br><span class="line">       .<span class="title function_">sort</span>(<span class="string">&quot;-age name&quot;</span>)</span><br><span class="line">       .<span class="title function_">limit</span>(<span class="number">5</span>)</span><br><span class="line">       .<span class="title function_">skip</span>(<span class="number">100</span>)</span><br><span class="line">       .<span class="title function_">getAggregationPipeline</span>()</span><br></pre></td></tr></table></figure><p>We got the following MongoDB shell aggregate pipeline:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$match&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;age&quot;</span> : &#123;</span><br><span class="line">                <span class="string">&quot;$gte&quot;</span> : <span class="number">18</span>,</span><br><span class="line">                <span class="string">&quot;$lte&quot;</span> : <span class="number">65</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$project&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;name&quot;</span> : <span class="number">1</span>,</span><br><span class="line">            <span class="string">&quot;age&quot;</span> : <span class="number">1</span>,</span><br><span class="line">            <span class="string">&quot;_id&quot;</span> : <span class="number">0</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$sort&quot;</span> : &#123;</span><br><span class="line">            <span class="string">&quot;age&quot;</span> : -<span class="number">1</span>,</span><br><span class="line">            <span class="string">&quot;name&quot;</span> : <span class="number">1</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$skip&quot;</span> : <span class="number">100</span></span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="string">&quot;$limit&quot;</span> : <span class="number">5</span></span><br><span class="line">    &#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure><h2><span id="minor-ui-improvements">Minor UI Improvements</span></h2><h3><span id="aggregation">Aggregation ...</span></h3><p>This version added a new handy &quot;aggregate...&quot; collection action to generate fluent aggregate template script.</p><p><img src="https://www.mongobooster.com/s3/img/aggregate-menu-item.jpeg" alt="MongoBooster Aggregate Menu Item"></p><h3><span id="update-view">Update View ...</span></h3><p>This version also added a new handy &quot;Update View...&quot; view action to drop and recreate MongoDB view.</p><p><img src="https://www.mongobooster.com/s3/img/update-view.jpeg" alt="MongoBooster Update-View"></p><h1><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h1><ul><li>New, add &quot;Copy Key&#x2F;JSON Path(s) to Clipboard&quot; item to the context-menu of tree&#x2F;grid view. This action will return the full JSON path of the selected item. e.g. &quot;object.array[0].subObj.field&quot;</li><li>Fixed, Property &#39;xxx&#39; does not exist on type &#39;{}&#39; warning.</li><li>Fixed, typings for ISODate constructor.</li><li>Fixed, Replica Set connection error withKerberos</li><li>Improved, add more display page size options [5, 10, 20, 50, 100, 200, 500, 1000, 2000]</li><li>Improved, resize app icon (the app icon on macOS is too large)</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Aggregation/">Aggregation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Shell-Extensions/">Shell Extensions</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB-Shell/">MongoDB Shell</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/mongobooster-33-is-out/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoBooster 3.2</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-32/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-32/</guid>
      <pubDate>Thu, 08 Dec 2016 02:42:36 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release Mongobooster 3.2 today. This version includes official support for MongoDB 3.4 along with some useful minor improvements and bugfix. For more information on MongoDB 3.4 , see &lt;a href=&quot;https://docs.mongodb.com/manual/release-notes/3.4/&quot;&gt;Release Notes for MongoDB 3.4&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-2-3&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-2-3&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.2.3&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.2.3&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Improved: add &amp;quot;Current Query Result&amp;quot; export option for non-cursor collections (plain collections)&lt;/li&gt;
&lt;li&gt;Changed: default &amp;quot;Tab Name Format&amp;quot; to &amp;quot;Database:Collection&amp;quot;&lt;/li&gt;
&lt;li&gt;Changed: loosen the restriction - Test Data Generator restricts to test database.&lt;/li&gt;
&lt;li&gt;Changed: loosen the restriction -Read-only status lock restricts to localhost:27017 connection&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-2-2&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-2-2&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.2.2&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.2.2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Fixed: missing edit icon in the dark theme&lt;/li&gt;
&lt;li&gt;Fixed: windows freezes or stops responding when SSH connection lost (Windows platform only)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;MongoDB-3-4-support&quot;&gt;&lt;a href=&quot;#MongoDB-3-4-support&quot; class=&quot;headerlink&quot; title=&quot;MongoDB 3.4 support&quot;&gt;&lt;/a&gt;MongoDB 3.4 support&lt;/h1&gt;&lt;p&gt;MongoBooster 3.2 adds support for &lt;strong&gt;&lt;em&gt;&lt;u&gt;all the new shell methods and operations&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; of MongoDB 3.4. Sharding Zones, Linearizable Read Concern, Decimal Type, New Aggregation Stages, Views, and Collation.&lt;/p&gt;
&lt;h2 id=&quot;New-Aggregation-Stages&quot;&gt;&lt;a href=&quot;#New-Aggregation-Stages&quot; class=&quot;headerlink&quot; title=&quot;New Aggregation Stages&quot;&gt;&lt;/a&gt;New Aggregation Stages&lt;/h2&gt;&lt;p&gt;MongoDB 3.4 adds a few aggregation stages for Recursive Search, Faceted Search, Facilitate Reshaping Documents, Count and Monitor. In MongoBooster 3.2, all new aggregation stages can be used as the chainable methods, rather than specifying a JSON object.&lt;/p&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;employees&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      .&lt;span class=&quot;title function_&quot;&gt;graphLookup&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;from&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;employees&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;startWith&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$reportsTo&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;connectFromField&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;reportsTo&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;connectToField&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;as&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;reportingHierarchy&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;artwork&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     .&lt;span class=&quot;title function_&quot;&gt;bucketAuto&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;groupBy&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$price&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;attr&quot;&gt;buckets&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;scores&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;addFields&lt;/span&gt;(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;attr&quot;&gt;totalHomework&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$sum&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$homework&amp;quot;&lt;/span&gt; &amp;#125; ,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;attr&quot;&gt;totalQuiz&lt;/span&gt;: &amp;#123; &lt;span class=&quot;attr&quot;&gt;$sum&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;quot;$quiz&amp;quot;&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;addFields&lt;/span&gt;(&amp;#123; &lt;span class=&quot;attr&quot;&gt;totalScore&lt;/span&gt;:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &amp;#123; &lt;span class=&quot;attr&quot;&gt;$add&lt;/span&gt;: [ &lt;span class=&quot;string&quot;&gt;&amp;quot;$totalHomework&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;$totalQuiz&amp;quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&amp;quot;$extraCredit&amp;quot;&lt;/span&gt; ] &amp;#125; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;exhibits&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;().&lt;span class=&quot;title function_&quot;&gt;unwind&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;$tags&amp;quot;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;sortByCount&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;$tags&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;people&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   .&lt;span class=&quot;title function_&quot;&gt;match&lt;/span&gt;(qb.&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;pets&amp;quot;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;exists&lt;/span&gt;(&lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   .&lt;span class=&quot;title function_&quot;&gt;replaceRoot&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;$pets&amp;quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;scores&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      .&lt;span class=&quot;title function_&quot;&gt;match&lt;/span&gt;(qb.&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;score&amp;quot;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;gt&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;80&lt;/span&gt;))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      .$count(&lt;span class=&quot;string&quot;&gt;&amp;quot;passing_scores&amp;quot;&lt;/span&gt;)&lt;span class=&quot;comment&quot;&gt;////why not count? MongoBooster already has a method called count which return number&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release Mongobooster 3.2 today. This version includes official support for MongoDB 3.4 along with some useful minor improvements and bugfix. For more information on MongoDB 3.4 , see <a href="https://docs.mongodb.com/manual/release-notes/3.4/">Release Notes for MongoDB 3.4</a>.</p><h2><span id="hotfix-in-mongobooster-323">Hotfix in MongoBooster 3.2.3</span></h2><ul><li>Improved: add &quot;Current Query Result&quot; export option for non-cursor collections (plain collections)</li><li>Changed: default &quot;Tab Name Format&quot; to &quot;Database:Collection&quot;</li><li>Changed: loosen the restriction - Test Data Generator restricts to test database.</li><li>Changed: loosen the restriction -Read-only status lock restricts to localhost:27017 connection</li></ul><h2><span id="hotfix-in-mongobooster-322">Hotfix in MongoBooster 3.2.2</span></h2><ul><li>Fixed: missing edit icon in the dark theme</li><li>Fixed: windows freezes or stops responding when SSH connection lost (Windows platform only)</li></ul><h1><span id="mongodb-34-support">MongoDB 3.4 support</span></h1><p>MongoBooster 3.2 adds support for <strong><em><u>all the new shell methods and operations</u></em></strong> of MongoDB 3.4. Sharding Zones, Linearizable Read Concern, Decimal Type, New Aggregation Stages, Views, and Collation.</p><h2><span id="new-aggregation-stages">New Aggregation Stages</span></h2><p>MongoDB 3.4 adds a few aggregation stages for Recursive Search, Faceted Search, Facilitate Reshaping Documents, Count and Monitor. In MongoBooster 3.2, all new aggregation stages can be used as the chainable methods, rather than specifying a JSON object.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">employees</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">      .<span class="title function_">graphLookup</span>(&#123;</span><br><span class="line">         <span class="attr">from</span>: <span class="string">&quot;employees&quot;</span>,</span><br><span class="line">         <span class="attr">startWith</span>: <span class="string">&quot;$reportsTo&quot;</span>,</span><br><span class="line">         <span class="attr">connectFromField</span>: <span class="string">&quot;reportsTo&quot;</span>,</span><br><span class="line">         <span class="attr">connectToField</span>: <span class="string">&quot;name&quot;</span>,</span><br><span class="line">         <span class="attr">as</span>: <span class="string">&quot;reportingHierarchy&quot;</span></span><br><span class="line">      &#125;)</span><br><span class="line">db.<span class="property">artwork</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">     .<span class="title function_">bucketAuto</span>(&#123;</span><br><span class="line">         <span class="attr">groupBy</span>: <span class="string">&quot;$price&quot;</span>,</span><br><span class="line">         <span class="attr">buckets</span>: <span class="number">4</span></span><br><span class="line">     &#125;)</span><br><span class="line">db.<span class="property">scores</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">    .<span class="title function_">addFields</span>(&#123;</span><br><span class="line">       <span class="attr">totalHomework</span>: &#123; <span class="attr">$sum</span>: <span class="string">&quot;$homework&quot;</span> &#125; ,</span><br><span class="line">       <span class="attr">totalQuiz</span>: &#123; <span class="attr">$sum</span>: <span class="string">&quot;$quiz&quot;</span> &#125;</span><br><span class="line">     &#125;)</span><br><span class="line">    .<span class="title function_">addFields</span>(&#123; <span class="attr">totalScore</span>:</span><br><span class="line">       &#123; <span class="attr">$add</span>: [ <span class="string">&quot;$totalHomework&quot;</span>, <span class="string">&quot;$totalQuiz&quot;</span>, <span class="string">&quot;$extraCredit&quot;</span> ] &#125; </span><br><span class="line">   &#125;)</span><br><span class="line">db.<span class="property">exhibits</span>.<span class="title function_">aggregate</span>().<span class="title function_">unwind</span>(<span class="string">&quot;$tags&quot;</span>).<span class="title function_">sortByCount</span>(<span class="string">&quot;$tags&quot;</span>)</span><br><span class="line">db.<span class="property">people</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">   .<span class="title function_">match</span>(qb.<span class="title function_">where</span>(<span class="string">&quot;pets&quot;</span>).<span class="title function_">exists</span>(<span class="literal">true</span>))</span><br><span class="line">   .<span class="title function_">replaceRoot</span>(<span class="string">&quot;$pets&quot;</span>)</span><br><span class="line">db.<span class="property">scores</span>.<span class="title function_">aggregate</span>()</span><br><span class="line">      .<span class="title function_">match</span>(qb.<span class="title function_">where</span>(<span class="string">&quot;score&quot;</span>).<span class="title function_">gt</span>(<span class="number">80</span>))</span><br><span class="line">      .$count(<span class="string">&quot;passing_scores&quot;</span>)<span class="comment">////why not count? MongoBooster already has a method called count which return number</span></span><br></pre></td></tr></table></figure><span id="more"></span> <h2><span id="decimal-type">Decimal Type</span></h2><p>MongoDB 3.4 adds support for the decimal128 format with the new decimal data type.</p><p>   <img src="https://www.mongobooster.com/s3/img/decimalType.jpeg" alt="MongoDb decimalType"></p><h2><span id="views">Views</span></h2><p>MongoDB 3.4 adds support for creating read-only views from existing collections or other views. MongoBooster 3.2 adds related shell method and GUI functions to make it easier to explorer and create.</p><p><img src="https://www.mongobooster.com/s3/img/views.jpeg" alt="MongoBooster Read-only Views"></p><h2><span id="minor-improvements-amp-bugfix">Minor Improvements &amp; Bugfix</span></h2><ul><li>Added, a &quot;Query By Example&quot; icon button to the tree view toolbar</li><li>Improved, auto-complete feature for object property and field</li><li>Changed, auto-complete feature restricts to &quot;test&quot; or &quot;demo&quot; database after 60 days trial expired.</li><li>Fixed, not able to connect SSL enabled(self-signed ) ReplicaSet connection.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Aggregation/">Aggregation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB3-4/">MongoDB3.4</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Views/">Views</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-32/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>What&#39;s new in MongoBooster 3.1</title>
      <link>https://www.nosqlbooster.com/blog/whats-new-in-mongobooster-31/</link>
      <guid>https://www.nosqlbooster.com/blog/whats-new-in-mongobooster-31/</guid>
      <pubDate>Sat, 08 Oct 2016 05:54:23 GMT</pubDate>
      
      <description>&lt;p&gt;This version includes query by example, ReplicaSet discover members, export query and selected documents can choose fields and export to sql, improved connection config other options editor along with some useful minor improvements and bugfix.&lt;/p&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-1-5&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-1-5&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.1.5&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.1.5&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Changed: Bind shortcut F5 to “Run&amp;#x2F;Execute Current Statement”, replacing F4.&lt;/li&gt;
&lt;li&gt;New: CTRL+F5 to execute the current statement into a new tab sheet.&lt;/li&gt;
&lt;li&gt;New: CTRL+F6 to execute the entire&amp;#x2F;selected script into a new tab sheet.&lt;/li&gt;
&lt;li&gt;Improved: Sort exported fields by name in the export dialog&lt;/li&gt;
&lt;li&gt;Improved: Auto-fetch all fields for the small-size collection (&amp;lt; 2M)&lt;/li&gt;
&lt;li&gt;Fixed: An autocomplete malfunction bug for the local connection after trial expired&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-1-3&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-1-3&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.1.3&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.1.3&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Changed, In order to keep the behavior consistent with mongodb shell, MongoBooster will insert&amp;#x2F;update number as double type.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;test&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;insert&lt;/span&gt;(&amp;#123;&lt;span class=&quot;attr&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;b&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1.0&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;c&lt;/span&gt;: &lt;span class=&quot;number&quot;&gt;1.1&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;d&lt;/span&gt;: &lt;span class=&quot;title class_&quot;&gt;NumberInt&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;), &lt;span class=&quot;attr&quot;&gt;e&lt;/span&gt;:&lt;span class=&quot;title class_&quot;&gt;Double&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;)&amp;#125;) &lt;span class=&quot;comment&quot;&gt;//or update&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//before(&amp;lt;3.1.3):  a: int32,   b: int32,   c:double, d: int32,  e:double&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//now   (&amp;gt;=3.1.3): a: double,  b: double,  c:double, d: int32,  e:double&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;Improved, execute current statement(F4) improved even focus on the commented line or empty line;&lt;/li&gt;
&lt;li&gt;fixed, local timezone didn&amp;#39;t show in json view;&lt;/li&gt;
&lt;li&gt;fixed, collection export cannot change filename;&lt;/li&gt;
&lt;li&gt;fixed, collection cannot export to mongoShell format.&lt;/li&gt;
&lt;li&gt;fixed, closing tab with mouse middle button closes the active one instead of the aimed one&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Hotfix-in-MongoBooster-3-1-2&quot;&gt;&lt;a href=&quot;#Hotfix-in-MongoBooster-3-1-2&quot; class=&quot;headerlink&quot; title=&quot;Hotfix in MongoBooster 3.1.2&quot;&gt;&lt;/a&gt;Hotfix in MongoBooster 3.1.2&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Added, Ctrl(Cmd)+D added as a new “duplicate selection” shortcut in editor&lt;/li&gt;
&lt;li&gt;Improved, table view column autosize for Date&amp;#x2F;Number type performance improved;&lt;/li&gt;
&lt;li&gt;Improved, run current line(F4) now can run a complete script statement even it split into multiple lines;&lt;/li&gt;
&lt;li&gt;Improved, custom snippets(favorite) now can be used in the middle of a script;&lt;/li&gt;
&lt;li&gt;Improved, Ctrl(Cmd)+Enter can be used to save in Type&amp;#x2F;Value Editor;&lt;/li&gt;
&lt;li&gt;Fixed, value contains scripts execute when using find.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;what-s-new-in-MongoBooster-3-1&quot;&gt;&lt;a href=&quot;#what-s-new-in-MongoBooster-3-1&quot; class=&quot;headerlink&quot; title=&quot;what&amp;#39;s new in MongoBooster 3.1&quot;&gt;&lt;/a&gt;what&amp;#39;s new in MongoBooster 3.1&lt;/h1&gt;&lt;h2 id=&quot;Query-by-Example&quot;&gt;&lt;a href=&quot;#Query-by-Example&quot; class=&quot;headerlink&quot; title=&quot;Query by Example&quot;&gt;&lt;/a&gt;Query by Example&lt;/h2&gt;&lt;p&gt;It&amp;#39;s more easy to get a query via this small but very useful feature. Multiple fields supported, nested object&amp;#x2F;array supported.&lt;/p&gt;
  &lt;video controls=&quot;&quot; width=&quot;800px&quot;&gt;
    &lt;source src=&quot;https://www.mongobooster.com/s3/mp4/query_by_example.mp4&quot; type=&quot;video/mp4&quot;&gt;Your browser does not support the video tag.&lt;/video&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>This version includes query by example, ReplicaSet discover members, export query and selected documents can choose fields and export to sql, improved connection config other options editor along with some useful minor improvements and bugfix.</p><h2><span id="hotfix-in-mongobooster-315">Hotfix in MongoBooster 3.1.5</span></h2><ul><li>Changed: Bind shortcut F5 to “Run&#x2F;Execute Current Statement”, replacing F4.</li><li>New: CTRL+F5 to execute the current statement into a new tab sheet.</li><li>New: CTRL+F6 to execute the entire&#x2F;selected script into a new tab sheet.</li><li>Improved: Sort exported fields by name in the export dialog</li><li>Improved: Auto-fetch all fields for the small-size collection (&lt; 2M)</li><li>Fixed: An autocomplete malfunction bug for the local connection after trial expired</li></ul><h2><span id="hotfix-in-mongobooster-313">Hotfix in MongoBooster 3.1.3</span></h2><ul><li>Changed, In order to keep the behavior consistent with mongodb shell, MongoBooster will insert&#x2F;update number as double type.</li></ul><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="property">test</span>.<span class="title function_">insert</span>(&#123;<span class="attr">a</span>:<span class="number">1</span>, <span class="attr">b</span>:<span class="number">1.0</span>, <span class="attr">c</span>: <span class="number">1.1</span>, <span class="attr">d</span>: <span class="title class_">NumberInt</span>(<span class="string">&quot;1.0&quot;</span>), <span class="attr">e</span>:<span class="title class_">Double</span>(<span class="string">&quot;1.0&quot;</span>)&#125;) <span class="comment">//or update</span></span><br><span class="line"><span class="comment">//before(&lt;3.1.3):  a: int32,   b: int32,   c:double, d: int32,  e:double</span></span><br><span class="line"><span class="comment">//now   (&gt;=3.1.3): a: double,  b: double,  c:double, d: int32,  e:double</span></span><br></pre></td></tr></table></figure><ul><li>Improved, execute current statement(F4) improved even focus on the commented line or empty line;</li><li>fixed, local timezone didn&#39;t show in json view;</li><li>fixed, collection export cannot change filename;</li><li>fixed, collection cannot export to mongoShell format.</li><li>fixed, closing tab with mouse middle button closes the active one instead of the aimed one</li></ul><h2><span id="hotfix-in-mongobooster-312">Hotfix in MongoBooster 3.1.2</span></h2><ul><li>Added, Ctrl(Cmd)+D added as a new “duplicate selection” shortcut in editor</li><li>Improved, table view column autosize for Date&#x2F;Number type performance improved;</li><li>Improved, run current line(F4) now can run a complete script statement even it split into multiple lines;</li><li>Improved, custom snippets(favorite) now can be used in the middle of a script;</li><li>Improved, Ctrl(Cmd)+Enter can be used to save in Type&#x2F;Value Editor;</li><li>Fixed, value contains scripts execute when using find.</li></ul><h1><span id="what39s-new-in-mongobooster-31">what&#39;s new in MongoBooster 3.1</span></h1><h2><span id="query-by-example">Query by Example</span></h2><p>It&#39;s more easy to get a query via this small but very useful feature. Multiple fields supported, nested object&#x2F;array supported.</p>  <video controls width="800px">    <source src="https://www.mongobooster.com/s3/mp4/query_by_example.mp4" type="video/mp4">Your browser does not support the video tag.</video><span id="more"></span>     <h2><span id="replicaset-improvement">ReplicaSet Improvement</span></h2><p>We add a new &quot;discover members&quot; button in the Replica Set Members Grid, add a valid member, you&#39;ll get all existed members.</p><p><img src="https://www.mongobooster.com/s3/img/discover_members.png" alt="Discover Replica Set Members"></p><p>In addition to this, after connect to a replica set connection, you&#39;ll get the new node under connection node, shows all replica set members and their , if you double click one of this nodes, you can connect to any member directly.</p><p><img src="https://www.mongobooster.com/s3/img/rs_tree.png" alt="Replica Set Members on Connection Tree"></p><h2><span id="connection-config39s-other-options-enhancement">Connection Config&#39;s Other Options Enhancement</span></h2><p>Editor is more friendly now, we provide a useful keys list and default value.</p><p><img src="https://www.mongobooster.com/s3/img/other_options.png" alt="Other Options List"></p><h2><span id="query-result-and-selected-documents-export-enhancement">Query Result and Selected Documents Export Enhancement</span></h2><p>Now, query and selected documents(include aggregation and vanilla array) support choose fields and export to sql like export database&#x2F;collection.</p><p><img src="https://www.mongobooster.com/s3/img/export_query_sql.png" alt="Export Query in SQL Format"></p><h2><span id="minor-improvements-and-bugfix">Minor Improvements and Bugfix</span></h2><ul><li>Improved, add more useful snippets (groupBy, createCappedCollection, convertCollectionToCapped...)</li><li>Improved, index creation now use shell to run just like export</li><li>Improved, keep SSH connection alive after network lost</li><li>Changed, set socketTimeoutMS to 0 as default</li><li>Fixed, auto refresh didn&#39;t remember first expand status</li><li>Fixed, copy document from table view without _id showed undefined</li><li>Fixed, read-only status of connection configuration did&#39;t properly export</li><li>Fixed, bsonType parameter in export template didn&#39;t work correctly(Only effect export to Oracle .sql file)</li><li>Fixed, authMechanism_SCRAM-SHA-1_ and _MONGODB-CR_didn&#39;t save in the Other Options Tab. (Other 3 are supported in Authentication Tab)</li><li>Fixed, one member replica set connection after export&#x2F;import lost replica set connection type</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Import-Export/">Import/Export</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Builder/">Query Builder</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/whats-new-in-mongobooster-31/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 3.0</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-30/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-30/</guid>
      <pubDate>Tue, 13 Sep 2016 09:26:03 GMT</pubDate>
      
      <description>&lt;p&gt;We&amp;#39;re so proud to release Mongobooster 3.0 today. In this brand new version, it gets more and more useful with our full-featured shell and several new tools.&lt;/p&gt;
&lt;p&gt;New free edition added with Mongobooster 3.0, this free edition is free for personal&amp;#x2F;commercial use but &lt;a href=&quot;/freelimitations&quot;&gt;limited function&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;Schema-Analyzer&quot;&gt;&lt;a href=&quot;#Schema-Analyzer&quot; class=&quot;headerlink&quot; title=&quot;Schema Analyzer&quot;&gt;&lt;/a&gt;Schema Analyzer&lt;/h1&gt;&lt;p&gt;Schema Analyzer is a very useful build-in tool. Due to schema-less feature, collections in MongoDB do not have a schema document to describe field&amp;#39;s datatype, collection structure and validations. With our brand new Schema Analyzer Tool, you will get a document to describe the schema of certain collection from sampled(random, first, last) N or all records.&lt;/p&gt;
&lt;p&gt;The document shows the probability of sampled objects , different types percentage, you could get a brief of certain collection&amp;#39;s schema. If you want more accurate result, you could sample more records or analyze whole collection, but it may took a long time to finish if the collection has millions records or thousands fields.&lt;/p&gt;
&lt;p&gt;It also shows document validation of the collection, which is a new feature in MongoDB 3.2. There will be a validator window showing below the document. If you click the link, field will be highlighted in the window.&lt;/p&gt;
&lt;p&gt;You could export this document to most popular document file types, like MS Word, PDF, HTML, along with JSON, TXT and CSV. Mongoose.js schema file supported as well. &lt;a href=&quot;https://s3.amazonaws.com/mongobooster/files/schemaSchema.js&quot;&gt;Sample file&lt;/a&gt;&lt;/p&gt;
  &lt;video controls=&quot;&quot;&gt;
    &lt;source src=&quot;https://www.mongobooster.com/s3/mp4/schema.mp4&quot; type=&quot;video/mp4&quot;&gt;Your browser does not support the video tag.&lt;/video&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>We&#39;re so proud to release Mongobooster 3.0 today. In this brand new version, it gets more and more useful with our full-featured shell and several new tools.</p><p>New free edition added with Mongobooster 3.0, this free edition is free for personal&#x2F;commercial use but <a href="/freelimitations">limited function</a>.</p><h1><span id="schema-analyzer">Schema Analyzer</span></h1><p>Schema Analyzer is a very useful build-in tool. Due to schema-less feature, collections in MongoDB do not have a schema document to describe field&#39;s datatype, collection structure and validations. With our brand new Schema Analyzer Tool, you will get a document to describe the schema of certain collection from sampled(random, first, last) N or all records.</p><p>The document shows the probability of sampled objects , different types percentage, you could get a brief of certain collection&#39;s schema. If you want more accurate result, you could sample more records or analyze whole collection, but it may took a long time to finish if the collection has millions records or thousands fields.</p><p>It also shows document validation of the collection, which is a new feature in MongoDB 3.2. There will be a validator window showing below the document. If you click the link, field will be highlighted in the window.</p><p>You could export this document to most popular document file types, like MS Word, PDF, HTML, along with JSON, TXT and CSV. Mongoose.js schema file supported as well. <a href="https://s3.amazonaws.com/mongobooster/files/schemaSchema.js">Sample file</a></p>  <video controls>    <source src="https://www.mongobooster.com/s3/mp4/schema.mp4" type="video/mp4">Your browser does not support the video tag.</video><span id="more"></span> <h1><span id="test-data-generator">Test Data Generator</span></h1><p>Create a large collection with random but &quot;real data&quot; is available in Mongobooster 3.0. We now provide more than 100 templates to create random faked &quot;real&quot; data, and you can use this tool to create test data with incredible large size. You could also define how much data is blank too, and how many docs to create. All settings will generate a script in the shell, and you could customize it with more complex business logic.</p><p><img src="/blog/&#9;&#10;https:/www.mongobooster.com/s3/img/test_data1.jpg" alt="Test Data Generator"><br><img src="/blog/&#9;&#10;https:/www.mongobooster.com/s3/img/test_data2.jpg" alt="Test Data Sample"></p><h1><span id="import-data-from-rdbms">Import Data from RDBMS</span></h1><p>In case you want to transform a project&#39;s database from MySql to MongoDB, or need to import data from 3rd party database., now you could do it through our RDBMS data import tool. We now support MySql, PostgreSql and MSSQL. Like test data generator, you could just config it on UI or write more complex business logic in the shell.</p><p><img src="https://www.mongobooster.com/s3/img/import_data.jpg" alt="Import Data"></p><h2><span id="read-only-status-lock">Read-only Status Lock</span></h2><p>You do have full access to a production database, but usually you don&#39;t want to change anything by mistaken, you could use the read-only status lock. There are two ways to use it:</p><ol><li>Set an entire connection read-only, edit the config make it read-only</li><li>Set any tab read-only temporarily, use the lock button on the tab toolbar</li></ol><p>You could unlock temporarily of a locked config by using the unlock button too. The temporary lock&#x2F;unlock only affects current tab.</p>  <video controls>    <source src="https://www.mongobooster.com/s3/mp4/read-only.mp4" type="video/mp4">Your browser does not support the video tag.</video><h2><span id="export-to-sql-file">Export to SQL file</span></h2><p>We added import RDBMS to MongoDB, on the other hand, we also provide export MongoDB database&#x2F;collection to .sql file. Supported dialect includes MySql, MSSQL, PostgreSql and Oracle.</p><p><img src="https://www.mongobooster.com/s3/img/export_sql.jpg" alt="Export to SQL file"></p><h2><span id="new-exportx2fimportx2fcopy-progression">New Export&#x2F;Import&#x2F;Copy Progression</span></h2><p>Like test data generator and import RDBMS to MongoDB, we put all the export&#x2F;import&#x2F;copy logic in the shell, you could review the code to make your changes. The progression is shown in theconsole.log&#x2F;print tab.</p><h2><span id="auto-refresh-on-result-dataview">Auto Refresh on result dataview</span></h2><p>Under the dataview setting menu, a dataview auto refresh setting list is added. Whichever view you use, the dataview will refresh automatically in certain seconds.(Note: if you want to change your shell code, you need to pause the auto refresh which is besides the countdown)</p>  <video controls>    <source src="https://www.mongobooster.com/s3/mp4/auto_refresh.mp4" type="video/mp4">Your browser does not support the video tag.</video><h2><span id="minor-enhancement">Minor Enhancement</span></h2><ul><li>Transpile to ES5<br>Mongobooster&#39;s code is written in ES6 as default, but Mongo shell hasn&#39;t supported it yet. If you want to use the code we created in that, you could transpile the code to ES5, it&#39;s in the context menu of the shell editor(you could find any command using Ctrl(Command)+Shift+P)</li><li>Support SSH key format: ECDH and ECDSA</li><li>Validator node on connection tree<br>Under collection node, a new validator node is added. Document validation is a new feature of MongoDB 3.0, you could double click the node to view it.</li><li>Add clear dataview button on the rightest dataview toolbar</li></ul><h2><span id="bugfix-and-other-improvements">Bugfix and other improvements</span></h2><ul><li>Added, show capped:true in collection stats tooltip.</li><li>Improved, reduce memory leak</li><li>Improved, enlarge editor as default when &quot;Edit Document&quot;</li><li>Improved, transform $ to \$ when add snippet(favorite script) from shell</li><li>Improved, add ordered row number in dataview, e.g. the 2nd page&#39;s record number starts with 21 if page size is 20</li><li>Fixed, mongotop with locks can choose database</li><li>Fixed, adminCommand(&quot;top&quot;) show duplicated data in tree view(MongoDB 2.6)</li><li>Fixed, &quot;Edit Field&#x2F;Value&quot; dialog opened without focus in editor</li><li>Fixed, auto complete shows fields from other collections</li><li>Fixed, after add key in &quot;Edit Field&#x2F;Value&quot;, tree view shows wrong data structure</li><li>Fixed, not all databases show in mongotop</li><li>Fixed, connection tree filter not showing when the window&#39;s width is less than 896px</li><li>Fixed, in JSON view with mongoexport format, Double show as an empty Object</li><li>Fixed, treeview pagination internal issue(somethings after change page size, no record shows)</li><li>Fixed, if db&#39;s name contains &quot;-&quot;, use db not working properly</li><li>Fixed, long titles of dialog not show properly</li><li>Fixed, after editing favorite, the edited script not selected</li><li>Fixed, a rarely happened treeview row cannot be selected issue</li><li>Fixed, after dragging some dialog, its height will decrease every time when reopen it</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Import-Export/">Import/Export</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Schema-Analyzer/">Schema Analyzer</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Data-Generator/">Data Generator</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-30/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>MongoBooster 2.3 is out</title>
      <link>https://www.nosqlbooster.com/blog/mongobooster-23-is-out/</link>
      <guid>https://www.nosqlbooster.com/blog/mongobooster-23-is-out/</guid>
      <pubDate>Tue, 12 Jul 2016 00:02:19 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re thrilled to announce the release of MongoBooster 2.3. This release includes significantly improved console.log&amp;#x2F;print tab, JSON view format options, bug fixes and a few minor improvements.&lt;/p&gt;
&lt;h2 id=&quot;Improved-console-log-print-tab&quot;&gt;&lt;a href=&quot;#Improved-console-log-print-tab&quot; class=&quot;headerlink&quot; title=&quot;Improved console.log&amp;#x2F;print tab&quot;&gt;&lt;/a&gt;Improved console.log&amp;#x2F;print tab&lt;/h2&gt;&lt;p&gt;The brand-new, improved console.log&amp;#x2F;print Tab collects all output messages in only one tab, instead of showing them in separated tabs. You can find and view these messages much easier than before. The elapsed time shows when the message occurs during the whole script execution.&lt;/p&gt;
  &lt;video controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://www.mongobooster.com/s3/mp4/new_console_log.mp4&quot; type=&quot;video/mp4&quot;&gt;Your browser does not support the video tag.&lt;/video&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re thrilled to announce the release of MongoBooster 2.3. This release includes significantly improved console.log&#x2F;print tab, JSON view format options, bug fixes and a few minor improvements.</p><h2><span id="improved-consolelogx2fprint-tab">Improved console.log&#x2F;print tab</span></h2><p>The brand-new, improved console.log&#x2F;print Tab collects all output messages in only one tab, instead of showing them in separated tabs. You can find and view these messages much easier than before. The elapsed time shows when the message occurs during the whole script execution.</p>  <video controls autoplay>    <source src="https://www.mongobooster.com/s3/mp4/new_console_log.mp4" type="video/mp4">Your browser does not support the video tag.</video><span id="more"></span>     <h2><span id="json-view-format-options">JSON view format options</span></h2><p>A new setting button is added to the toolbar of the result view. It allows you to more easily customize results view.And now, the JSON view can switch between the two formats，mongoshell and mongoexport.</p><p>  <img src="https://www.mongobooster.com/s3/img/resultview-settings-button.jpg" alt="JSON view format options"></p><h2><span id="bug-fixes-and-minor-updates">Bug fixes and minor updates</span></h2><ul><li>New, remember Edit Field&#x2F;Type Dialog size.</li><li>New, add a option to disable showing db stats and collection stats.</li><li>Improved, show custom fields in DBRefs(e.g. Doctrine add &quot;_doctrine_class_name&quot; in the DBRef).</li><li>Fixed, NumberInt does not work.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Log/">Log</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/View/">View</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/mongobooster-23-is-out/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 2.2</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-22/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-22/</guid>
      <pubDate>Thu, 23 Jun 2016 03:20:06 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of MongoBooster 2.2. This release includes Real-Time log viewer, tree&amp;#x2F;table view sorting options, shell tab title format options, bug fixes and a few minor improvements.&lt;/p&gt;
&lt;h2 id=&quot;Real-Time-log-viewer&quot;&gt;&lt;a href=&quot;#Real-Time-log-viewer&quot; class=&quot;headerlink&quot; title=&quot;Real-Time log viewer&quot;&gt;&lt;/a&gt;&lt;strong&gt;Real-Time log viewer&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;Instead of showing a simple loading spinner, this release add a new log viewer to show the real-time console log&amp;#x2F; print info. When the shell script execution time exceeds 2 seconds, the log window will be popped up and monitor script logs at real-time.&lt;/p&gt;
  &lt;video controls=&quot;&quot; autoplay=&quot;&quot;&gt;
    &lt;source src=&quot;https://www.mongobooster.com/s3/img/real-time-console-log.mp4&quot; type=&quot;video/mp4&quot;&gt;Your browser does not support the video tag.&lt;/video&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of MongoBooster 2.2. This release includes Real-Time log viewer, tree&#x2F;table view sorting options, shell tab title format options, bug fixes and a few minor improvements.</p><h2><span id="real-time-log-viewer"><strong>Real-Time log viewer</strong></span></h2><p>Instead of showing a simple loading spinner, this release add a new log viewer to show the real-time console log&#x2F; print info. When the shell script execution time exceeds 2 seconds, the log window will be popped up and monitor script logs at real-time.</p>  <video controls autoplay>    <source src="https://www.mongobooster.com/s3/img/real-time-console-log.mp4" type="video/mp4">Your browser does not support the video tag.</video><span id="more"></span>     <h2><span id="result-view-sorting-options">Result view sorting options</span></h2><p>This release adds sorting options to tree view&#x2F;table view fields. (Menu -&gt; Options -&gt; Result TreeView&#x2F;TableView Sort Type)</p><ul><li>Nature (default value, as they are in the JSON view)</li><li>Ascending Order</li><li>Descending Order</li></ul><h2><span id="shell-tab-title-format-options">Shell tab title format options</span></h2><p>This release adds options to form a tab name of the editor window in the following format list. (Menu -&gt; Options -&gt; Editor Tab Name Format)</p><ul><li>Database:Collection@Connection</li><li>Database:Collection</li><li>Database@Connection</li></ul><h2><span id="bug-fixes-and-minor-updates">Bug fixes and minor updates</span></h2><ul><li>New, add &quot;choose custom fields&quot; feature to build-in export utility</li><li>New, add &quot;insertOneAndFetchIt&quot; snippet</li><li>New,add &quot;expand whole tree menu item&quot; to tree view right-click menu</li><li>New, add &quot;add more&quot; button to replica set editor</li><li>Improved, result view toolbar responsive resize.</li><li>Improved, Mongodump: disable invalid dumpDbUsersAndRoles option when dump all databases</li><li>Improved, auto focus to new node after clicking right-click menu item &quot;create database&quot;</li><li>Fixed, <strong>throw error when</strong> print([null,undefined]) in JSON View</li><li>Fixed,GridFS: right-click menu item &quot;add files...&quot; does not work</li><li>Fixed, save as... extension issue. (file.js_copy -&gt; file_copy.js)</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Log/">Log</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-22/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Release MongoBooster 2.1.2</title>
      <link>https://www.nosqlbooster.com/blog/release-mongobooster-212/</link>
      <guid>https://www.nosqlbooster.com/blog/release-mongobooster-212/</guid>
      <pubDate>Mon, 13 Jun 2016 02:37:20 GMT</pubDate>
      
      <description>&lt;p&gt;It&amp;#39;s time to update MongoBooster again :) This is a smaller update in terms of raw added features – but this release includes better Quick Find, bug Fixes and a few minor improvements.&lt;/p&gt;
&lt;h2 id=&quot;Quick-Find&quot;&gt;&lt;a href=&quot;#Quick-Find&quot; class=&quot;headerlink&quot; title=&quot;Quick Find&quot;&gt;&lt;/a&gt;Quick Find&lt;/h2&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Quick Find&lt;/strong&gt;&lt;/em&gt; to symbol with (⌘+F|CTRL+F) provides the possibility to get to any database and collection object in the connection tree view. In this release, there are a few minor improvements for Quick Find with connection tree.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;add a close &amp;quot;x&amp;quot; button in the right corner of the Quick-find input box.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Press &amp;quot;Mod+F&amp;quot; will focus to input-box rather than closing it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Press &amp;quot;ESC&amp;quot; will close Quick-find input box and focus to connection instead of focusing script editor.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.mongobooster.com/s3/img/quick-finder-close-button.jpg&quot; alt=&quot;Quick Find&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>It&#39;s time to update MongoBooster again :) This is a smaller update in terms of raw added features – but this release includes better Quick Find, bug Fixes and a few minor improvements.</p><h2><span id="quick-find">Quick Find</span></h2><p><em><strong>Quick Find</strong></em> to symbol with (⌘+F|CTRL+F) provides the possibility to get to any database and collection object in the connection tree view. In this release, there are a few minor improvements for Quick Find with connection tree.</p><ul><li><p>add a close &quot;x&quot; button in the right corner of the Quick-find input box.</p></li><li><p>Press &quot;Mod+F&quot; will focus to input-box rather than closing it.</p></li><li><p>Press &quot;ESC&quot; will close Quick-find input box and focus to connection instead of focusing script editor.</p><p><img src="https://www.mongobooster.com/s3/img/quick-finder-close-button.jpg" alt="Quick Find"></p></li></ul><span id="more"></span> <h2><span id="bug-fixes-and-minor-updates">Bug fixes and minor updates</span></h2><ul><li>New, add &quot;release notes&quot; link item to help menu.</li><li>Improved, allow to add &quot;favorite script&quot; when the content of script editor is empty.</li><li>Improved, allow to cancel and close mongdump&#x2F;mongoexport dialog when the dialog is loading.</li><li>Improved, remove unnecessary_id field in the generated &quot;create index&quot; script.</li><li>Fixed, a few broken URL link, &quot;feedback&#x2F;support&quot;, &quot;homepage&quot; in the bottom toolbar.</li><li>Fixed, correct ShellJS sample snippet.</li><li>Fixed, mongodump dialog style issue.</li><li>Fixed, a few icon issues with dark theme.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Find/">Find</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/release-mongobooster-212/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 2.1</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-21/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-21/</guid>
      <pubDate>Tue, 07 Jun 2016 03:00:40 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of MongoBooster 2.1. This release includes Quick Find for the connection tree, ShellJS integration, support mongo Shell Native Methods, auto load &lt;code&gt;.mongorc.js&lt;/code&gt;, export user-defined fields and a few minor improvements and bugs fix. &lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Mac OS X all these new features are available for Windows,and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;Quick-Find&quot;&gt;&lt;a href=&quot;#Quick-Find&quot; class=&quot;headerlink&quot; title=&quot;Quick Find&quot;&gt;&lt;/a&gt;Quick Find&lt;/h2&gt;&lt;p&gt;Quick find to symbol with (⌘+F|CTRL+F) provides the possibility to get to any database and collection object in the connection tree view.&lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/quick-find.jpg&quot; alt=&quot;Quick find&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of MongoBooster 2.1. This release includes Quick Find for the connection tree, ShellJS integration, support mongo Shell Native Methods, auto load <code>.mongorc.js</code>, export user-defined fields and a few minor improvements and bugs fix. </p><p>Although we are showing screenshots of MongoBooster for Mac OS X all these new features are available for Windows,and Linux as well.</p><h2><span id="quick-find">Quick Find</span></h2><p>Quick find to symbol with (⌘+F|CTRL+F) provides the possibility to get to any database and collection object in the connection tree view.</p><p>  <img src="https://www.mongobooster.com/s3/img/quick-find.jpg" alt="Quick find"></p><span id="more"></span>   <h2><span id="shelljs-integration">ShellJS Integration</span></h2><p><a href="https://github.com/shelljs/shelljs">ShellJS</a>(version: 0.7.0) is a portable (Windows&#x2F;Linux&#x2F;OS X) implementation of Unix shell commands. It is a fantastic tool for integrate MongoDB Shell Script with the external shell environment in a cross-platform way. ShellJS Commands can send their output to another command in a pipe-like fashion. sed, grep, cat, exec, to, and toEnd can appear on the right-hand side of a pipe. </p><p>The following example use shelljs and <a href="https://github.com/zemirco/json2csv">json2csv</a> to export a MongoDB collection to a CSV file.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//prepare, install json2csv command cli</span></span><br><span class="line"><span class="comment">//npm i -g json2csv</span></span><br><span class="line"><span class="keyword">let</span> users=db.<span class="property">users</span>.<span class="title function_">find</span>(&#123;&#125;).<span class="title function_">toArray</span>();</span><br><span class="line">shelljs.<span class="title function_">echo</span>(<span class="title class_">JSON</span>.<span class="title function_">stringify</span>(users)).<span class="title function_">to</span>(<span class="string">&quot;~/tmp/test.json&quot;</span>); <span class="comment">//save as a json file</span></span><br><span class="line">shelljs.<span class="title function_">exec</span>(<span class="string">&quot;json2csv -i ~/tmp/test.json -o ~/tmp/out.csv&quot;</span>) <span class="comment">//convert json file to csv</span></span><br></pre></td></tr></table></figure><h2><span id="mongo-shell-native-methods">Mongo Shell Native Methods</span></h2><p>MongoBooster V2.1 implemented all MongoShell native methods except for those described for internal use. Now, you can use &quot;load&quot; method to load and run a JavaScript file in the shell or use &quot;cat&quot; to return the contents of the specified file.</p><ul><li><a href="https://docs.mongodb.com/manual/reference/method/js-native/">Mongo Shell Native Methods Reference</a></li><li>MongoBooster Native methods will convert a tilde path to an absolute path.</li></ul><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">load</span>(<span class="string">&quot;~/dev/mongodb/myscript.js&quot;</span>);</span><br><span class="line"><span class="title function_">cat</span>(<span class="string">&quot;~/dev/mongodb/myscript&quot;</span>);</span><br><span class="line"><span class="title function_">ls</span>(<span class="string">&quot;~/dev/mongodb/&quot;</span>);</span><br></pre></td></tr></table></figure><h2><span id="load-quot~x2fmongorcjsquot">Load &quot;~&#x2F;.mongorc.js&quot;</span></h2><p>  <img src="https://www.mongobooster.com/s3/img/mongorc-js.jpg" alt="mongorc-js"></p><h2><span id="export-user-defined-fields">Export User-Defined Fields</span></h2><p><img src="https://www.mongobooster.com/s3/img/export-user-defined-fields.jpg" alt="export-user-defined-fields"></p><h2><span id="copy-collection-with-indexes">Copy collection with indexes</span></h2><p>Add an option, When copy&#x2F;pasting one or more collections, copy the indexes as well.</p><h2><span id="bug-fixes-and-minor-updates">Bug fixes and minor updates</span></h2><ul><li>New, add &quot;mongorestore...&quot; to import submenu in main toolbar</li><li>New, add &quot;mongodump...&quot; to export submenu in main toolbar</li><li>Improved, upgrade shell deps to latest version</li><li>Fixed,remove duplicated snippets</li><li>Fixed, semver check issue, support mongodb 3.2.6-atlas</li><li>Fixed, manually list database, uncheck button does not work</li><li>Fixed, tile window does not work in multiple screens</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Find/">Find</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Mongo-Shell/">Mongo Shell</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Shell-Extensions/">Shell Extensions</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-21/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 2.0</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-20/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-20/</guid>
      <pubDate>Tue, 24 May 2016 05:12:31 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re thrilled to announce the release of MongoBooster 2.0. This major release includes fluent query builder, GUI for mongotop and mongostat, dark theme, user-defined snippets, restore last working state , auto-update and a few minor improvements. Even better now, MongoBooster, the smartest and most feature rich MongoDB Admin GUI is** free for non-commercial** use. &lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;Fluent-Query-Builder&quot;&gt;&lt;a href=&quot;#Fluent-Query-Builder&quot; class=&quot;headerlink&quot; title=&quot;Fluent Query Builder&quot;&gt;&lt;/a&gt;Fluent Query Builder&lt;/h2&gt;&lt;p&gt;MongoBooster supports mongoose-like &lt;a href=&quot;/FluentQueryAPI&quot;&gt;fluent query builder API&lt;/a&gt; which enables you to build up a query using chaining syntax, rather than specifying a JSON object. The aggregation framework is now fluent as well. You can use it as currently documented or via the chainable methods. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/FluentQueryAPI&quot;&gt;Read More About It&lt;/a&gt;&lt;/p&gt;
  &lt;figure class=&quot;highlight js&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// instead of writing:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;(&amp;#123;&lt;span class=&quot;attr&quot;&gt;age&lt;/span&gt;:&amp;#123;&lt;span class=&quot;attr&quot;&gt;$gte&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;,&lt;span class=&quot;attr&quot;&gt;$lte&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;65&lt;/span&gt;&amp;#125;&amp;#125;,&amp;#123;name,&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;attr&quot;&gt;age&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;:-&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&amp;#125;).&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&amp;#123;&lt;span class=&quot;attr&quot;&gt;age&lt;/span&gt;:-&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// we can write:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;age&amp;#x27;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;gte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;lte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;65&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;select&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;name age -_id&amp;#x27;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;quot;-age name&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// passing query conditions is permitted too&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;collection&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;find&lt;/span&gt;().&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&amp;#123; &lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&amp;#x27;mongobooster&amp;#x27;&lt;/span&gt; &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// chaining&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;collection&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;age&amp;#x27;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;gte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;lte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;65&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&amp;#123; &lt;span class=&quot;string&quot;&gt;&amp;#x27;name&amp;#x27;&lt;/span&gt;: &lt;span class=&quot;regexp&quot;&gt;/^mongobooster/i&lt;/span&gt; &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;friends&amp;#x27;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;slice&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// aggregation&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;db.&lt;span class=&quot;property&quot;&gt;companies&lt;/span&gt;.&lt;span class=&quot;title function_&quot;&gt;aggregate&lt;/span&gt;(qb.&lt;span class=&quot;title function_&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;founded_year&amp;#x27;&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;gte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;2000&lt;/span&gt;).&lt;span class=&quot;title function_&quot;&gt;lte&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;2010&lt;/span&gt;)) &lt;span class=&quot;comment&quot;&gt;//qb:querybuilder&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  .&lt;span class=&quot;title function_&quot;&gt;group&lt;/span&gt;(&amp;#123;&lt;span class=&quot;attr&quot;&gt;_id&lt;/span&gt;:&lt;span class=&quot;string&quot;&gt;&amp;quot;$category_code&amp;quot;&lt;/span&gt;,&lt;span class=&quot;attr&quot;&gt;count&lt;/span&gt;:&amp;#123;&lt;span class=&quot;attr&quot;&gt;$sum&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&amp;#125;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  .&lt;span class=&quot;title function_&quot;&gt;sort&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&amp;#x27;-count&amp;#x27;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  .&lt;span class=&quot;title function_&quot;&gt;limit&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re thrilled to announce the release of MongoBooster 2.0. This major release includes fluent query builder, GUI for mongotop and mongostat, dark theme, user-defined snippets, restore last working state , auto-update and a few minor improvements. Even better now, MongoBooster, the smartest and most feature rich MongoDB Admin GUI is** free for non-commercial** use. </p><p>Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h2><span id="fluent-query-builder">Fluent Query Builder</span></h2><p>MongoBooster supports mongoose-like <a href="/FluentQueryAPI">fluent query builder API</a> which enables you to build up a query using chaining syntax, rather than specifying a JSON object. The aggregation framework is now fluent as well. You can use it as currently documented or via the chainable methods. </p><p><a href="/FluentQueryAPI">Read More About It</a></p>  <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// instead of writing:</span></span><br><span class="line">db.<span class="property">user</span>.<span class="title function_">find</span>(&#123;<span class="attr">age</span>:&#123;<span class="attr">$gte</span>:<span class="number">18</span>,<span class="attr">$lte</span>:<span class="number">65</span>&#125;&#125;,&#123;name,<span class="number">1</span>,<span class="attr">age</span>:<span class="number">1</span>,<span class="attr">_id</span>:-<span class="number">1</span>&#125;).<span class="title function_">sort</span>(&#123;<span class="attr">age</span>:-<span class="number">1</span>, <span class="attr">name</span>:<span class="number">1</span>&#125;);</span><br><span class="line"><span class="comment">// we can write:</span></span><br><span class="line">db.<span class="property">user</span>.<span class="title function_">where</span>(<span class="string">&#x27;age&#x27;</span>).<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>).<span class="title function_">select</span>(<span class="string">&#x27;name age -_id&#x27;</span>).<span class="title function_">sort</span>(<span class="string">&quot;-age name&quot;</span>);</span><br><span class="line">    <span class="comment">// passing query conditions is permitted too</span></span><br><span class="line">db.<span class="property">collection</span>.<span class="title function_">find</span>().<span class="title function_">where</span>(&#123; <span class="attr">name</span>: <span class="string">&#x27;mongobooster&#x27;</span> &#125;)</span><br><span class="line"><span class="comment">// chaining</span></span><br><span class="line">db.<span class="property">collection</span></span><br><span class="line">    .<span class="title function_">where</span>(<span class="string">&#x27;age&#x27;</span>).<span class="title function_">gte</span>(<span class="number">18</span>).<span class="title function_">lte</span>(<span class="number">65</span>)</span><br><span class="line">    .<span class="title function_">where</span>(&#123; <span class="string">&#x27;name&#x27;</span>: <span class="regexp">/^mongobooster/i</span> &#125;)</span><br><span class="line">    .<span class="title function_">where</span>(<span class="string">&#x27;friends&#x27;</span>).<span class="title function_">slice</span>(<span class="number">10</span>)</span><br><span class="line"><span class="comment">// aggregation</span></span><br><span class="line">db.<span class="property">companies</span>.<span class="title function_">aggregate</span>(qb.<span class="title function_">where</span>(<span class="string">&#x27;founded_year&#x27;</span>).<span class="title function_">gte</span>(<span class="number">2000</span>).<span class="title function_">lte</span>(<span class="number">2010</span>)) <span class="comment">//qb:querybuilder</span></span><br><span class="line">  .<span class="title function_">group</span>(&#123;<span class="attr">_id</span>:<span class="string">&quot;$category_code&quot;</span>,<span class="attr">count</span>:&#123;<span class="attr">$sum</span>:<span class="number">1</span>&#125;&#125;)</span><br><span class="line">  .<span class="title function_">sort</span>(<span class="string">&#x27;-count&#x27;</span>)</span><br><span class="line">  .<span class="title function_">limit</span>(<span class="number">100</span>)</span><br></pre></td></tr></table></figure><span id="more"></span> <h2><span id="gui-for-mongotop">GUI for mongotop</span></h2><p>For MongoDB, mongotop do pretty much the same job as the Unix command <strong>top</strong>, it is used to monitor the Mongo instance.The output of <a href="https://docs.mongodb.com/manual/reference/program/mongotop/">mongotop</a> indicates the amount of time the mongod process spend reading and writing to a specific collection during the update interval. mongotop provides statistics on a per-collection level.</p><p>MongoBooster offers a build-in GUI tool for MongoTop. No external MongoTop command line tools dependence and works for MongoDB 2.2-3.2.</p><p>  <img src="https://www.mongobooster.com/s3/img/mongotop_dark.png" alt="mongo top"></p><h2><span id="gui-for-mongostat">GUI for mongostat</span></h2><p>The mongostat utility provides a quick overview of the status of a currently running mongod or mongos instance. mongostat is functionally similar to the UNIX&#x2F;Linux file system utility vmstat, but provides data regarding mongod and mongos instances.</p><p>MongoBooster offers a build-in GUI tool for MongoStat too. No external MongoStat command line tools dependence. </p><p>  <img src="https://www.mongobooster.com/s3/img/mongostat_dark.png" alt="mongostat"></p><h2><span id="dark-theme">Dark theme</span></h2><p>MongoBooster V2 offers two themes, light and dark.  The Dark theme provides a high-contrast visual theme (black background with brighter text). You can switch the theme by click &quot;theme&quot; button in the right corner of the main toolbar.</p><p>  <img src="https://www.mongobooster.com/s3/img/dark_theme.png" alt="dark theme"></p><h2><span id="user-defined-snippets">User-Defined Snippets</span></h2><p>Having a collection of pre-defined code snippets is handy, but code snippets become much more useful when you make your own. Now, you can add your self-defined code snippets by clicking &quot;add favorite script...&quot; button in the editor toolbar.</p><ul><li><p>Snippets work in a similar way as those for Ace editor and sublime</p></li><li><p>Ace editor help manual: <a href="https://cloud9-sdk.readme.io/docs/snippets#section-creating-a-snippet">create a new snippet</a></p><p><img src="https://www.mongobooster.com/s3/img/user-defined-snippets-dark.png" alt="user-defined-snippets"></p></li></ul><h2><span id="restore-last-working-state">Restore last working state</span></h2><p>MongoBooster add a new option to remember the last working state, so when you restarted MongoBooster all of your last working connection, database , collection, editor script got restored to last working view.</p><ul><li>Use Menu--&gt; Options &#x3D;&gt; Restore last working state to toggle the feature.</li></ul><h2><span id="recognize-~x2fsshx2fconfig">Recognize ~&#x2F;.ssh&#x2F;config</span></h2><p>When add new ssh connection, MongoBooster will recognize SSH config file and auto fill SSH connection fields from ssh config file. </p><h2><span id="auto-updates">Auto-updates</span></h2><p>The auto-updates feature enable MonoBooster to automatically update itself, so your copy will always be up-to-date. The auto-updates module is based on  <a href="https://github.com/Squirrel">Squirrel framework</a>. </p><blockquote><p>Note: For Mac and Windows users, we have enabled the auto-update channel. Auto-updates are not supported for Linux.</p></blockquote><h2><span id="bug-fixes-and-minor-updates">Bug fixes and minor updates</span></h2><ul><li>Improved, upgrade lodash to 4.12.0</li><li>Improved, Show all fields in GridFS documents</li><li>Improved, speed up history scripts and favorite snippets menu show deplay time</li><li>Improved, speed up new editor tab show delay time</li><li>Improved, allow to copy text from MongoDump or MongoRestore log window</li><li>New, set the initial view in preferences, Options-&gt;Default view mode</li><li>New, add more snippets, Javascript lang, QueryBuilder and 3rd lib sample</li><li>New, use Standard Tab Switching Shortcut (cmd+shift+] ,cmd+shift+[), Mac Only</li><li>New, let the middle mouse button click close the tabs on the top</li><li>New, integrate <a href="http://momentjs.com/timezone/">moment timezone</a>. Use &quot;moment.tz&quot; to access it</li><li>New, add &quot;to URI&quot; button to connection editor dialog</li><li>New, add &quot;Use own Root CA File&quot; option to SSL connection</li><li>New, add &quot;cancel&quot; button when refresh connection tree</li><li>New, add context-menu to JSON viewer</li><li>Fixed, ensure command-palette input box get focus when it is visible</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Mongo-Utilities/">Mongo Utilities</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Query-Builder/">Query Builder</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Fluent-API/">Fluent API</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Theme/">Theme</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-20/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 1.6</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-16/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-16/</guid>
      <pubDate>Tue, 12 Apr 2016 06:39:25 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of MongoBooster 1.6. This release includes favorite scripts management and a minor updates.&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;Favorite-Scripts-Management&quot;&gt;&lt;a href=&quot;#Favorite-Scripts-Management&quot; class=&quot;headerlink&quot; title=&quot;Favorite Scripts Management&quot;&gt;&lt;/a&gt;&lt;strong&gt;Favorite Scripts Management&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;Now you can save any script fragments as favorite script. You can use the &amp;quot;add favorite&amp;quot; button on the right top of the editor or through&amp;nbsp;Command Palette to open the dialog to add or edit your favorite.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/img/favorite.png&quot; alt=&quot;Snippets Management&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of MongoBooster 1.6. This release includes favorite scripts management and a minor updates.</p><p>Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h2><span id="favorite-scripts-management"><strong>Favorite Scripts Management</strong></span></h2><p>Now you can save any script fragments as favorite script. You can use the &quot;add favorite&quot; button on the right top of the editor or through&nbsp;Command Palette to open the dialog to add or edit your favorite.&nbsp;</p><p><img src="/blog/img/favorite.png" alt="Snippets Management"></p><span id="more"></span> <p><img src="/blog/img/add-edit-snippet.png" alt="add&#x2F;edit snippet"></p><p>We also provide a management dialog to add&#x2F;edit&#x2F;delete&#x2F;export&#x2F;import your favorite scripts.</p><p><img src="/blog/img/favorite-manager.png" alt="snippets manager"></p><h2><span id="bug-fixes-and-minor-updates">Bug fixes and minor updates</span></h2><ul><li><p>Improved, copy LUUID text instead of Bin data <a href="http://feedback.mongobooster.com/topic/enable-copying-luuid-from-contextual-menu-instead-of-only-bindata">Idea from Carl</a></p></li><li><p>Fixed, <strong>sh.status()</strong> show error on a sharded cluster</p></li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Favorite-Scripts/">Favorite Scripts</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-16/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 1.5</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-15/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-15/</guid>
      <pubDate>Mon, 21 Mar 2016 07:38:15 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;MongoBooster 1.5&lt;/a&gt;. This release includes MongoDB Enterprise connection options(Kerberos, LDAP) and a few minor updates.&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;MongoDB-Enterprise-Authentication&quot;&gt;&lt;a href=&quot;#MongoDB-Enterprise-Authentication&quot; class=&quot;headerlink&quot; title=&quot;MongoDB Enterprise Authentication&quot;&gt;&lt;/a&gt;&lt;strong&gt;MongoDB Enterprise Authentication&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;MongoBooster now officially fully supports MongoDB Enterprise Edition by adding two new authentication mechanisms Kerberos(GSSAPI) &amp;amp; LDAP(PLAIN), in addition to already supported regular username&amp;#x2F;password(SCRAM-SHA-1(added in MongoDB 3.0)&amp;#x2F;MONGODB-CR) &amp;amp; X.509.&lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;/blog/img/connect-kerberos.png&quot; alt=&quot;kerberos&quot;&gt;&lt;br&gt;  &lt;img src=&quot;/blog/img/connect-ldap.png&quot; alt=&quot;ldap&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of <a href="/downloads">MongoBooster 1.5</a>. This release includes MongoDB Enterprise connection options(Kerberos, LDAP) and a few minor updates.</p><p>Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h2><span id="mongodb-enterprise-authentication"><strong>MongoDB Enterprise Authentication</strong></span></h2><p>MongoBooster now officially fully supports MongoDB Enterprise Edition by adding two new authentication mechanisms Kerberos(GSSAPI) &amp; LDAP(PLAIN), in addition to already supported regular username&#x2F;password(SCRAM-SHA-1(added in MongoDB 3.0)&#x2F;MONGODB-CR) &amp; X.509.</p><p>  <img src="/blog/img/connect-kerberos.png" alt="kerberos"><br>  <img src="/blog/img/connect-ldap.png" alt="ldap"></p><span id="more"></span>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/MongoDB-Enterprise/">MongoDB Enterprise</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-15/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 1.3</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-13/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-13/</guid>
      <pubDate>Fri, 26 Feb 2016 09:21:15 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;MongoBooster 1.3&lt;/a&gt;. This release significantly improved the UI performance for the MongoDB aggregation operation.This release also includes UI for Mongoexport and Mongoimport utilities, non-cursor data client-side paging and several minor updates.&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;Aggregation-UI-performance-improved&quot;&gt;&lt;a href=&quot;#Aggregation-UI-performance-improved&quot; class=&quot;headerlink&quot; title=&quot;Aggregation UI performance improved&quot;&gt;&lt;/a&gt;Aggregation UI performance improved&lt;/h2&gt;&lt;p&gt;In the older version of MongoBooster, if I you exec a MongoDB aggregation which will get large number of result, the GUI will just hang or freeze for a while. The 1.3 release addressed the annoying issue, it speeds up the aggregation operation significantly. We strongly recommend you upgrading to version 1.3 to improve the aggregation performance if you ever experienced this.&lt;/p&gt;
&lt;h2 id=&quot;Mongoexport-and-Mongoimport-GUI&quot;&gt;&lt;a href=&quot;#Mongoexport-and-Mongoimport-GUI&quot; class=&quot;headerlink&quot; title=&quot;Mongoexport and Mongoimport GUI&quot;&gt;&lt;/a&gt;Mongoexport and Mongoimport GUI&lt;/h2&gt;&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/mongoexport.png&quot; alt=&quot;mongoexport&quot;&gt;&lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/mongoimport.png&quot; alt=&quot;mongoimport&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of <a href="/downloads">MongoBooster 1.3</a>. This release significantly improved the UI performance for the MongoDB aggregation operation.This release also includes UI for Mongoexport and Mongoimport utilities, non-cursor data client-side paging and several minor updates.</p><p>Although we are showing screenshots of MongoBooster for Windows, all these new features are available for Mac OS X and Linux as well.</p><h2><span id="aggregation-ui-performance-improved">Aggregation UI performance improved</span></h2><p>In the older version of MongoBooster, if I you exec a MongoDB aggregation which will get large number of result, the GUI will just hang or freeze for a while. The 1.3 release addressed the annoying issue, it speeds up the aggregation operation significantly. We strongly recommend you upgrading to version 1.3 to improve the aggregation performance if you ever experienced this.</p><h2><span id="mongoexport-and-mongoimport-gui">Mongoexport and Mongoimport GUI</span></h2><p>  <img src="https://www.mongobooster.com/s3/img/mongoexport.png" alt="mongoexport"></p><p>  <img src="https://www.mongobooster.com/s3/img/mongoimport.png" alt="mongoimport"></p><span id="more"></span>   <h2><span id="notable-bug-fixes-and-minor-updates">Notable bug fixes and minor updates</span></h2><ul><li>New, client-side paging for non-cursor result data.</li><li>New, add storageEngine name on tooltip of connection.</li><li>Improved, handle uncaught exception to avoid crashes.</li><li>Improved, rearrange connection tree context menu.</li><li>Improved: polish UI for Mongoexport.   </li><li>Fixed, a date to JSON string convert issue.</li><li>Fixed, the GridFs viewer cannot open file with an unknown file extension.</li><li>Fixed: a SSL connection issue with &quot;compose.io&quot; SSL enabled mongodb server.</li><li>Fixed: can not export &quot;aggregate&quot; query result if the &quot;auto-fetch count&quot; feature is enabled.</li><li>Fixed: can not export query result after canceling &quot;choose fields&quot; dialog.</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Aggregation/">Aggregation</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Import-Export/">Import/Export</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-13/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 1.2</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-12/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-12/</guid>
      <pubDate>Fri, 19 Feb 2016 09:00:11 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;MongoBooster 1.2&lt;/a&gt;. This release adds show history of previous scripts, UI for MongoDump and MongoRestore, show the total number of rows, new Hack font and several minor updates.  This release also addresses a few issues around stability, performance and compatibility.  &lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Windows, all this new features are available for Mac OS X and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;Show-history-of-previous-scripts&quot;&gt;&lt;a href=&quot;#Show-history-of-previous-scripts&quot; class=&quot;headerlink&quot; title=&quot;Show history of previous scripts&quot;&gt;&lt;/a&gt;Show history of previous scripts&lt;/h2&gt;&lt;p&gt;Press [F7] to pop up history scripts list.  Use the up and down key&amp;#39;s to scroll through previously typed scripts. Press [Enter] to send it to the code editor shell.&lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/history_scripts.png&quot; alt=&quot;history_scripts&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;Show-the-total-number-of-rows&quot;&gt;&lt;a href=&quot;#Show-the-total-number-of-rows&quot; class=&quot;headerlink&quot; title=&quot;Show the total number of rows&quot;&gt;&lt;/a&gt;Show the total number of rows&lt;/h2&gt;&lt;p&gt;By default, MongoBooster will show the total number of rows in result view if the query time is less then 300 ms.  You can disable the feature or adjust the setting in &amp;quot;Options -&amp;gt; Auto fetch cursor count&amp;quot;. &lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;/blog/&amp;#9;&amp;#10;https:/www.mongobooster.com/s3/img/total_docs_count.png&quot; alt=&quot;total_docs_count&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;MongoDump-GUI-tool&quot;&gt;&lt;a href=&quot;#MongoDump-GUI-tool&quot; class=&quot;headerlink&quot; title=&quot;MongoDump GUI tool&quot;&gt;&lt;/a&gt;MongoDump GUI tool&lt;/h2&gt;&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/mongodump.png&quot; alt=&quot;mongodump&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;MongoRestore-GUI-tool&quot;&gt;&lt;a href=&quot;#MongoRestore-GUI-tool&quot; class=&quot;headerlink&quot; title=&quot;MongoRestore GUI tool&quot;&gt;&lt;/a&gt;MongoRestore GUI tool&lt;/h2&gt;&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/mongorestore.png&quot; alt=&quot;mongorestore&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;New-Hack-font&quot;&gt;&lt;a href=&quot;#New-Hack-font&quot; class=&quot;headerlink&quot; title=&quot;New Hack font&quot;&gt;&lt;/a&gt;New Hack font&lt;/h2&gt;&lt;p&gt;MongoBooster adapts a new typeface designed for source code - &lt;a href=&quot;http://sourcefoundry.org/hack/&quot;&gt;Hack&lt;/a&gt;.  Hack is hand groomed and optically balanced to be your go-to code face.&lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/hackfont.png&quot; alt=&quot;hack font&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of <a href="/downloads">MongoBooster 1.2</a>. This release adds show history of previous scripts, UI for MongoDump and MongoRestore, show the total number of rows, new Hack font and several minor updates.  This release also addresses a few issues around stability, performance and compatibility.  </p><p>Although we are showing screenshots of MongoBooster for Windows, all this new features are available for Mac OS X and Linux as well.</p><h2><span id="show-history-of-previous-scripts">Show history of previous scripts</span></h2><p>Press [F7] to pop up history scripts list.  Use the up and down key&#39;s to scroll through previously typed scripts. Press [Enter] to send it to the code editor shell.</p><p>  <img src="https://www.mongobooster.com/s3/img/history_scripts.png" alt="history_scripts"></p><h2><span id="show-the-total-number-of-rows">Show the total number of rows</span></h2><p>By default, MongoBooster will show the total number of rows in result view if the query time is less then 300 ms.  You can disable the feature or adjust the setting in &quot;Options -&gt; Auto fetch cursor count&quot;. </p><p>  <img src="/blog/&#9;&#10;https:/www.mongobooster.com/s3/img/total_docs_count.png" alt="total_docs_count"></p><h2><span id="mongodump-gui-tool">MongoDump GUI tool</span></h2><p>  <img src="https://www.mongobooster.com/s3/img/mongodump.png" alt="mongodump"></p><h2><span id="mongorestore-gui-tool">MongoRestore GUI tool</span></h2><p>  <img src="https://www.mongobooster.com/s3/img/mongorestore.png" alt="mongorestore"></p><h2><span id="new-hack-font">New Hack font</span></h2><p>MongoBooster adapts a new typeface designed for source code - <a href="http://sourcefoundry.org/hack/">Hack</a>.  Hack is hand groomed and optically balanced to be your go-to code face.</p><p>  <img src="https://www.mongobooster.com/s3/img/hackfont.png" alt="hack font"></p><span id="more"></span>   <h2><span id="notable-bug-fixes-and-minor-updates">Notable bug fixes and minor updates</span></h2><ul><li>New, support authentication mechanism x.509(authMechanism&#x3D;MONGODB-X509)</li><li>New, a few new code snippets, insertOne, insertMany, updateOne, updateMany, deleteOne, deleteMany, replaceOne, findTextSearch, findnearLegacy2d and findnear$geometry</li><li>New, use ObjectId.getTimestamp() method  to get &quot;createAt&quot; field and show it in JSON View.(<a href="https://www.mongobooster.com/s3/img/objectId_createdAt.png">screenshot</a>) </li><li>New, add a &quot;View Document...&quot; right-click menu item in GridFS tree view</li><li>New, add &quot;Options-&gt;Legacy UUID Encoding&quot;, allow LUUID encoding as Raw data, Java, C# or Python</li><li>New, add &quot;Help -&gt; MongoDB Aggregation Pipeline Quick Reference&quot; menu item </li><li>New, add a &quot;Feedback&#x2F;Support&quot; button to bottom-right of home screen</li><li>Improved, new &quot;To URI&quot; dialog, hide password&#x2F;include extra parameters(eg. SSH connections)</li><li>Improved,  allow you to export the query result set in GridFS bucket</li><li>Improved,  allow select item when importing connection configs</li><li>Improved,  can export aggregation result direct to the .csv file</li><li>Improved,  add &quot;Current query result&quot; source to export aggregation query</li><li>Improved,  create Database now enabled in all supported MongoDB versions</li><li>Improved,  manually list visible databases when use any authentication</li><li>Fixed,  cannot copy database between two MongoBooster windows</li><li>Fixed,  a sorting issue in method auto-complete</li><li>Fixed,  a UI refresh issue after changing editor theme </li><li>Fixed,  In-place editor can not save string when it contains double quote</li><li>Fixed,  PageUp and PageDown Keypress bug in tree view and table view</li></ul>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Releases/">Releases</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Import-Export/">Import/Export</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/History-Scripts/">History Scripts</category>
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Mongo-Utilities/">Mongo Utilities</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-12/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Tip: Mouse Hover and F1</title>
      <link>https://www.nosqlbooster.com/blog/tip-mousehover-and-f1/</link>
      <guid>https://www.nosqlbooster.com/blog/tip-mousehover-and-f1/</guid>
      <pubDate>Thu, 21 Jan 2016 05:27:25 GMT</pubDate>
      
      <description>&lt;p&gt;The mouse hover will show many useful information, such as types of symbols, function definition, type information and document.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Press F1 will lead you to MongoDB online document as the cursor is over a valid MongoDB method. &amp;nbsp;The F1 online help is MongoDB version sensitive, e.g. if you connected to MongoDB 2.6, it will lead you to MongoDB 2.6 online document, &amp;nbsp;you will get MongoDB 3.2 online document if you connected to MongoDB 3.2.&amp;nbsp;&lt;/p&gt;
  &lt;video controls=&quot;&quot; class=&quot;embed-responsive-item&quot;&gt;
    &lt;source src=&quot;http://s3.amazonaws.com/mongobooster/mp4/hoverAndF1.mp4&quot; type=&quot;video/mp4&quot;&gt;
  &lt;/video&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>The mouse hover will show many useful information, such as types of symbols, function definition, type information and document.&nbsp;</p><p>Press F1 will lead you to MongoDB online document as the cursor is over a valid MongoDB method. &nbsp;The F1 online help is MongoDB version sensitive, e.g. if you connected to MongoDB 2.6, it will lead you to MongoDB 2.6 online document, &nbsp;you will get MongoDB 3.2 online document if you connected to MongoDB 3.2.&nbsp;</p>  <video controls class="embed-responsive-item">    <source src="http://s3.amazonaws.com/mongobooster/mp4/hoverAndF1.mp4" type="video/mp4">  </video><span id="more"></span>]]></content:encoded>
      
      
      
      <category domain="https://www.nosqlbooster.com/blog/tags/Editor/">Editor</category>
      
      
      <comments>https://www.nosqlbooster.com/blog/tip-mousehover-and-f1/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Announcing MongoBooster 1.1</title>
      <link>https://www.nosqlbooster.com/blog/announcing-mongobooster-11/</link>
      <guid>https://www.nosqlbooster.com/blog/announcing-mongobooster-11/</guid>
      <pubDate>Fri, 15 Jan 2016 07:16:23 GMT</pubDate>
      
      <description>&lt;p&gt;Today, we&amp;#39;re happy to announce the release of &lt;a href=&quot;/downloads&quot;&gt;MongoBooster 1.1&lt;/a&gt;. This release adds support for GridFS, Dark editor theme, Mark connection with color and several minor updates.&lt;/p&gt;
&lt;p&gt;Although we are showing screenshots of MongoBooster for Mac OS X, all this new features are available for Windows and Linux as well.&lt;/p&gt;
&lt;h2 id=&quot;GridFS-Support&quot;&gt;&lt;a href=&quot;#GridFS-Support&quot; class=&quot;headerlink&quot; title=&quot;GridFS Support&quot;&gt;&lt;/a&gt;&lt;strong&gt;GridFS Support&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;MongoBooster fully supports MongoDB’s GridFS. With our GridFS Viewer, you can read and write to GridFS collections. Files can be added easily with drag and drop.&lt;/p&gt;
&lt;p&gt;  &lt;img src=&quot;https://www.mongobooster.com/s3/img/gridfs.gif&quot; alt=&quot;GridFS&quot;&gt;&lt;/p&gt;</description>
      
      
      
      <content:encoded><![CDATA[<p>Today, we&#39;re happy to announce the release of <a href="/downloads">MongoBooster 1.1</a>. This release adds support for GridFS, Dark editor theme, Mark connection with color and several minor updates.</p><p>Although we are showing screenshots of MongoBooster for Mac OS X, all this new features are available for Windows and Linux as well.</p><h2><span id="gridfs-support"><strong>GridFS Support</strong></span></h2><p>MongoBooster fully supports MongoDB’s GridFS. With our GridFS Viewer, you can read and write to GridFS collections. Files can be added easily with drag and drop.</p><p>  <img src="https://www.mongobooster.com/s3/img/gridfs.gif" alt="GridFS"></p><span id="more"></span>   <h2><span id="dark-editor-theme">Dark Editor Theme</span></h2><p>MongoBooster offers a new dark editor theme with improved syntax highlighter.</p><p>  <img src="https://www.mongobooster.com/s3/img/dark_editor_theme.jpg" alt="Dark Theme"></p><h2><span id="mark-connection-with-color">Mark Connection with Color</span></h2><p>When working on dev&#x2F;prod databases at the same time you may unintentionally delete or update something on prod instead of dev. Now you could mark prod ones in red and dev in green. It would help you prevent this kind of mistake.</p><p> <img src="https://www.mongobooster.com/s3/img/markWithColor.gif" alt="Mark with color"></p><h2><span id="drag-and-drop-tabs-re-ordering">Drag and Drop Tabs Re-ordering</span></h2><p>MongoBooster allow moving of tabs via drag and drop reordering.</p><p><img src="https://www.mongobooster.com/s3/img/tabs_drag_drop.gif" alt="Tabs Drag Drop"></p><h2><span id="improve-connection-tree">Improve Connection Tree</span></h2><ul><li>Add &quot;Server Current operations&quot; and &quot;Server Build Info&quot; Right-Click Menu items in Connection node.</li><li>Add &quot;Create GridFS Bucket ...&quot;, &quot;View Users&quot;, &quot;Add User...&quot; , &quot;Server Status&quot;, &quot;Server BuildInfo&quot; and &quot;Database Current Operations&quot; Right-Click Menu items in Database node</li><li>Add &quot;Current Operations&quot; Right-Click Menu item in Collection Node</li><li>Add &quot;Add User ...&quot; Right-Click Menu item in Users Node</li></ul><h2><span id="notable-minor-updates">Notable Minor Updates</span></h2><ul><li>Connections Config Export and Import</li><li>Use &quot;Ctrl+Alt+N&quot; to open a new window, it is handy to analyze the results of the same query side-by-side.</li><li>Keep SSH connection alive and improve performance</li><li>Enable F5 for refresh tree nodes(Win+Linux)</li><li>Improve Syntax Highlighter</li><li>Improve field auto-complete</li><li>Add &quot;show in tab shell&quot; button on JSON View Dialog</li><li>Upgrade Moment.js to 2.11.1;</li><li>Several minor bugs fixed</li></ul>]]></content:encoded>
      
      
      
      
      <comments>https://www.nosqlbooster.com/blog/announcing-mongobooster-11/#disqus_thread</comments>
      
    </item>
    
  </channel>
</rss>
