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.

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.

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.

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.

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.

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:
- USE mydatabase
- CREATE DATABASE sampledb
- SHOW DATABASES
- SHOW COLLECTIONS
- SHOW USERS
- SHOW PROFILES
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"
)