Menu

Robomongo 0.9.0 RC3 released

During work on this release candidate we have solved number of the most annoying problems of version 0.8.5. Among them are fixes for incorrect handling of the floating-point numbers and BSON arrays.

More details you can find below.

Floating-point precision

In Robomongo 0.8.5, floating-point numbers are displayed with incorrect precision:

Such wrong representation can lead to a possibility of unintended overwriting a document with wrong values:

Robomongo 0.9.0 RC3 handles floating-point numbers correctly:

Also you can notice, that we have returned back the distinct icon for Double types. Integer and floating-point numbers now have different icons:

Handling of arrays

There are a lot of MongoDB shell functions that return array, instead of a single JavaScript object. For instance, db.collection.getIndexes() returns an array of indexes for particular a collection. While db.collection.find() returns DBQuery cursor. Previous versions of Robomongo handle correctly cursors and single BSON/JS objects, but the handling of arrays was incorrect.

All this mainly because internally MongoDB has no such thing like array. The array of BSON objects is represented and stored as normal BSON object with numerical fields name that are monotonically increasing.

If you try to insert the following BSON document into collection:

{
numbers: [
7,
979,
36
]
}

It will be actually stored as:

{
numbers: {
"0": 7,
"1": 979,
"2": 36
}
}

How does MongoDB know that numbers field is actually an array, and not just an object? Besides field name and value there is an additional encoded information — field type. For upper mentioned field it will be equal to 4, what means Array type, according to BSON specification.

That is why, when you run the following query in Robomongo 0.8.5 and earlier versions, you will get an object, instead of an array:

In Robomongo 0.9.0 RC3 we have fixed this, and array is now represented as JavaScript array:

The incorrect representation of arrays in previous versions of Robomongo affects only top-level documents. Such documents are always read-only (like result of db.getCollectionNames()). Arrays that are nested inside some other BSON document are always represented correctly in Robomongo. In any way, starting from RC3 all kinds of arrays are displayed correctly.

Support Robomongo!

These latest releases are brought to you by Paralect guys who are dreaming to continue the work on Robomongo: