MongoDb Features

DbSchema can connect to MongoDB and reverse engineer a 'virtual' schema model by reading a few documents from each collection.

Layouts

The virtual schema is represented graphically. The layouts are diagrams with data & query tools. Edit collections or fields by double-clicking the collection header.

MongoDB Diagrams

Visual Query Editor

The visual query builder for MongoDB features filters, projections, and aggregation. The generated queries are shown on the right side of the query builder.

MongoDB Query Builder

HTML Documentation

Double-clicking collection or fields you can add comments. DbSchema can export the MongoDB diagrams as interactive HTML5 or PDF documentation. The collection and field comments can be read as mouse-over tooltips.

HTML Documentation

Data Generator

You can test your application and MongoDB queries against test data generated using the data generator. The data generator can use pre-configured patterns or reverse regular expressions.

Data Generator

Compare Virtual Schema

The DbSchema model contains its own local image of the database structure. Connecting to other MongoDB database, you can compare the actual model from DbSchema with the connected database.

Compare MongoDB database structure

Query Editor

Visual Query Editor can compose native MongoDB queries. It can use the keyword 'db' for the current connected database, or directly the database name if you need to access multiple databases.

use sampleDb
db.employees.find()
or
sampleDb.employees.find()
or
sampledb.getCollection('employees').find();

Further commands available in in the Query Editor are:

Here a sample insert into the database statement:
USE sampledb;

db.getCollection('employees').insert( {
firstName:'John',
lastName:'Smith',
age:28,
hobbies:[
  {
     name:'Swimm'
  },
  {
     name:'Jogging'
  }
]
});

Map-Reduce Jobs

The Query Editor can execute map-reduce jobs as in this example:
local.words.insertOne({word: 'sample'});
local.words.insertOne({word: 'day'});
local.words.insertOne({word: 'plane'});

var m =function map() {
 emit(this.word, {count: 5})
}
var r=function reduce(key, values) {
        var count = 5
        for (var i = 0; i < values.length; i++)
            count += values[i].count
        return {count: count}
    }
local.words.mapReduce(m, r );

or

local.words.mapReduce(
    "function map() { \r\n" +
    " emit(this.word, {count: 1}) \r\n" +
    "}",
    " function reduce(key, values) { \r\n" +
    "    var count = 0 \r\n" +
    "    for (var i = 0; i < values.length; i++) \r\n" +
    "        count += values[i].count \r\n" +
    "    return {count: count} \r\n" +
    "}"
    // , "mrresult"
)