Robomongo is now Robo 3T, with MongoDB 3.4 support

We are very happy to announce the release of Robo 3T 1.1 with MongoDB 3.4 Support! In this release we have some fundamental changes, improvements and fixes.

One important change worth to mention is that we changed our name from Robomongo to Robo 3T because of trademark reasons (more details about this topic can be seen in section Renaming from Robomongo to Robo 3T).


Table of Contents

  1. MongoDB 3.4 Support
  2. New Data Type: NumberDecimal (Decimal128) Support
  3. ECMAScript 2015 aka ES6 Support (Modernized JavaScript Implementation)
  4. Improvements & Bug Fixes
    a. Fix for Robo 3T Shell Timeout Issue
    b. Stability Improvement: Fix for a crash on MACOS Sierra
    c. Security Improvement: OpenSSL version upgrade
    d. Tool Chain Improvements: Modern C++14 features are enabled
  5. Renaming from Robomongo to Robo 3T
  6. CentOS Compatibility Problem
  7. Download Robo 3T 1.1

1. MongoDB 3.4 Support

Since the latest version of MongoDB version 3.4 released, we were very eager to support this new MongoDB version as soon as possible. After being busy developing and releasing some critical features like SSL and Replica Sets, finally with this version Robo 3T also supports MongoDB 3.4.

Some key features in MongoDB 3.4 are linearizable read concerns, views, collation and new data type NumberDecimal (Decimal128).

A quick word about new data type NumberDecimal (Decimal128), it is added to represent 128-bit decimal-based floating-point values capable of emulating decimal rounding with exact precision. This functionality is intended for applications that handle monetary data, such as financial, tax, and scientific computations. (More about this topic can be seen in section 2 in this blog)

Some major evolution in capabilities and enhancements in MongoDB 3.4 are "native graph computation, faceted navigation, rich real-time analytics, geo-distributed MongoDB zones, elastic clustering".

Finally, some words about "Free Mongo DB 3.4 Cluster by Mongo Atlas". By the time of writing this blog post, MongoDB offers free, easily configurable and usable 3.4 cluster at Mongo Atlas web site.

Example MongoDB 3.4 cluster view on Mongo Atlas web site:

Example MongoDB 3.4 cluster view on Robo 3T:

More info about MongoDB 3.4:
https://docs.mongodb.com/manual/release-notes/3.4/
https://www.mongodb.com/collateral/mongodb-3-4-whats-new


2. New Data Type: NumberDecimal (Decimal128) Support

NumberDecimal (Decimal128) is added as new data type in MongoDB 3.4.

Normally, mongo shell (and Robo 3T shell) treats all numbers as 64-bit floating-point double values by default. NumberDecimal("") constructor is now usable to explicitly specify 128-bit decimal-based floating-point values capable of emulating decimal rounding with exact precision. This functionality is intended for applications that handle monetary data, such as financial, tax, and scientific computations.

The decimal BSON type uses the IEEE 754 decimal128 floating-point numbering format which supports 34 decimal digits (i.e. significant digits) and an exponent range of −6143 to +6144.

Examples of Usage:

The NumberDecimal("") constructor accepts the decimal value as a string:

db.getCollection('Bills').insert({ "Jan": NumberDecimal("1000.55") })  

The value is stored in the database as follows:

NumberDecimal("1000.55")  

Warning: The NumberDecimal() constructor also accepts double values (i.e. without quotes), although this is not recommended due to the risk of losing precision.

Showing not recommended usage and result:
NumberDecimal(1000.55)

The value is stored (with losing precision) in the database as follows:
NumberDecimal("1000.55000000000")

Finally, let's see how this new type looks like on Robo 3T, showing a collection with documents having objects with NumberDecimal (Decimal128) type values:

Note that, Edit Document dialog shows NumberDecimal("...") with quotes as suggested usage by MongoDB.

Sources:
https://docs.mongodb.com/manual/core/shell-types/
https://docs.mongodb.com/manual/reference/bson-types/


3. ECMAScript 2015 aka ES6 (Modernized JavaScript Implementation) Support

In MongoDB 3.2, the javascript engine used for both the mongo shell and for server-side javascript in mongod changed from V8 to SpiderMonkey. SpiderMonkey brought increased support for features defined in officially known as ECMAScript 2015 (aka 6th edition of ECMAScript, abbreviated as ES6).

Within this release, we have also added support for ECMAScript 2015 in Robo 3T shell.

Let's see some of the ECMAScript 2015 features with examples:

i. Arrow Functions

Arrow functions are a great addition to the JavaScript language. They make for short and concise code.

// With ECMAScript 2015: Arrow Functions
db.Bills.find({}).limit(3).map( doc => doc._id );

// Before ECMAScript 2015
db.Bills.find({}).limit(3).map( function(doc) {  
    return doc._id; 
});

// Output:
[
    ObjectId("59228b0574d828afae4876cd"),
    ObjectId("59228b0574d828afae4876ce"),
    ObjectId("59228b0574d828afae4876cf")
]
ii. Computed Property Names

Before ECMAScript 2015, computed property names such as [month + '20'] was causing the whole script to fail and give error. In this release they are usable. A simple practical example can be seen below:

Two more new features, "Default Values for Function Parameters" and "Two new ways of declaring variables: 'let' and 'const'" can be seen in our wiki page Robomongo ECMAScript 2015 (aka ES6) Support.

The list of ECMAScript 2015 features goes very long, a good source for all list is Exploring ES6 book by Dr Axel Rauschmayer - 2015.

References:
JavaScript Changes in MongoDB 3.2:
https://docs.mongodb.com/manual/release-notes/3.2-javascript/

JavaScript Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference

Exploring ES6 book by Dr Axel Rauschmayer - 2015
http://exploringjs.com/es6/index.html

ECMAScript® 2015 Language Specification:
http://www.ecma-international.org/ecma-262/6.0/index.html


4. Improvements & Bug Fixes

a. Fix for Robo 3T Shell Timeout Issue

This fix is an attempt to solve a high importance problem reported by many users in different tickets.

Tickets effected by this issue:
1106: Scripts end prematurely and randomly when using loop [High Vote]
1119: 0.9-RC8+ silently stops script when inserting in loop
1098: Aggregation runs successfully but not results returned
And more: 1121,1130,1138,1139,1169,1201,1214,1253,1269,1241,1279,1366

What was the problem?
The problem was long lasting scripts were finishing prematurely and silently if the Robo 3T shell timeout (15 seconds by default) has expired.

Here is an example of the problem and fix in practice:

Note that, by default, the timeout for Robo 3T shell is 15 seconds, which can be seen/configured in robo3t.json config file as below:

...
"shellTimeoutSec" : 15,
...

What is the fix?
We added a mechanism to detect this timeout, a new error window to show the problem and a new dialog to configure Robo 3T shell timeout directly from the timeout error window as previosly shown above or from menu item "Options -> Change Shell Timeout..." shown below:

The new value of shell timeout ("shellTimeoutSec") is effective immediately on all existing/new tabs and persistent after program restart (saved into config file).

Note:
Before this fix, the workaround solution was to modify "shellTimeoutSec" : 15 parameter in Robo 3T config file and restart Robo 3T.

Details of workaround solution:
https://github.com/Studio3T/robomongo/issues/1106#issuecomment-230258348

b. Stability Improvement: Fix included to prevent a crash on MACOS Sierra

As a part of Robo 3T stability improvements, a fix to prevent a crash at program start seen on on MACOS Sierra has been included in this release and has already fixed these two tickets seen below:

#1369: Error on open (1.0.0 crashes on start)
#1349: Robomongo crashes constantly macOS Sierra

c. Security Improvement: OpenSSL version upgrade

As a part of transition to MongoDB 3.4, we have also upgraded our OpenSSL libraries to a newer version openssl-1.0.1u (2016-Sep-22).

Beside being a security improvement, this upgrade also makes sure that Robo 3T is consistent with latest MongoDB 3.4 which also uses the same OpenSSL version (1.0.1u) and can be seen in MongoDB 3.4 server logs at start:

C:\Program Files\MongoDB\Server\3.4>bin\mongod.exe --port 27018  
...
2017-06-08T18:05:32.660+0300 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1u-fips  22 Sep 2016  
...

d. Tool Chain Improvements: Modern C++14 features are enabled

This section is intended for developers who might be interested in contributing Robo 3T open source project.

Along with transition to MongoDB 3.4, we have updated our tool chain and it is now possible to use latest modern C++14 features in Robo 3T code base.
(Note: Theoretically, C++17 is the current latest C++ version, but we can say C++14 is the latest practically used and implemented by most compiler vendors.)

We are using the following modern compilers for Windows, Linux and MAC OS in order:

  • Visual Studio 2015 Update 3
  • GCC 5.4.1
  • Clang version: Apple LLVM version 7.3.0 (clang-703.0.31)

It is worth to mention that much more important and fundamental changes in C++ were actually introduced in C++11 Major release.

Some of the new C++14 and C++11 features we are using and updating our code with can be seen here:
Robomongo C++11/14 Transition Guide

Sources:
Build Mongodb From Source


5. Renaming from Robomongo to Robo 3T

Why are we changing the name?
Short answer, we need to change the name of our product, purely because of trademark reasons.

More about this subject can be seen in the following link Changing the name of Robomongo, blog post by Dmitry.

And quoting from Dmitry's blog post:

Mongo and MongoDB have always been registered trademark of MongoDB Inc, and as the database has grown in commercial importance, the company wants to clear up any confusion between its products and those built around the database. So, it has been talking to companies whose tools use the words Mongo or MongoDB in their names, about changing what they are called. That’s fair enough and we understand its point of view.

With this renaming the new location and the name for config file can be seen below:

Windows  
    C:\Users\<user>\.3T\robo-3t\1.1.1\robo3t.json

MAC  
    /Users/<user>/.3T/robo-3t/1.1.1/robo3t.json

Linux  
    /home/<user>/.3T/robo-3t/1.1.1/robo3t.json

Please also see:
Robo 3T Config File Guide


6. CentOS Compatibility Problem

With transition to MongoDB 3.4, we updated our tool chain to modern tools, unfortunately some of the required packages were not available for CentOS (e.g. they were available for Ubuntu), and this caused Robo 3T not to work on CentOS 6 and 7.

Until these packages are available or we found another solution, unfortunately Robo 3T will not launch on CentOS 6 and 7. We hope this will be a temporary problem and hope to support again CentOS as soon as possible.

Download

Download Robo 3T 1.1, our best version of Robo 3T.

Enjoy!

Follow us on Twitter (@robomongo) to be notified about future releases. Please submit any found issues to our GitHub.