MongoDB City Cases Example

Overview

This is an example report developed using Jaspersoft Studio and then published to JasperReports Server. All the data comes from a single MongoDB collection called "cases". 

Features of the reports are:

  • Aggregation framework
  • Geospacial features of MongoDB including the $geoNear operator
  • Parametrized queries, including the $in operator passed to a collection
  • JasperReports Map component
  • Drill through from map
  • Sub-reports

Requirements

  • JasperReports Server v5.5 Professional or Enterprise (I used HTML5 charts, otherwise this would work in CE)
  • MongoDB >2.4 (I use geospatial features not available in older versions)

Getting the Data

For those wanting to generate the data themselves:

The data was generated randomly using http://www.json-generator.com/ - you are welcome to recreate the data yourself using this as a template. You can save the generated JSON to a file and then run these commands:

Import the raw json file to mongodb:

mongoimport -c cases --jsonArray --drop --file ~/Desktop/json_file.json

Cast the dates to ISO dates:

mongo --eval "db.cases.find().forEach(function(doc){doc.CaseOpenDatetime = new Date(doc.CaseOpenDatetime);db.cases.save(doc)});"
mongo --eval "db.cases.find().forEach(function(doc){doc.CaseBeginDatetime = new Date(doc.CaseBeginDatetime);db.cases.save(doc)});"
mongo --eval "db.cases.find().forEach(function(doc){doc.CaseCurrentStatusDatetime = new Date(doc.CaseCurrentStatusDatetime);db.cases.save(doc)});"

Add a Geospatial index for the lat/longitude :

mongo --eval " db.cases.ensureIndex({"location" : "2dsphere" } );”

For those wanting to get started quickly:

You can simply download the collection here - you will then need to import it

Import data :

mongoimport --host localhost --db test --collection cases < mongodb_cases.json

Add a Geospatial index for the lat/longitude :

mongo --eval " db.cases.ensureIndex({"location" : "2dsphere" } );”

Getting the Reports

You should be running JasperReports Server v5.5 for this to work - it likely works in previous versions but not guaranteed. You will simply need to log in as superuser and import this repository export.

The import should bring in a folder under /public/ called MongoDB. It will also import a Topic that you can use in Ad-Hoc, that topic will alse be under the Public Topics folder.

Screenshots

The main report in action:

Page 2 of the drill through report showing off the $near operator of MongoDB:

Data Exploration

This section was contributed by emistry

This data was used to setup Adhoc Data Exploration from JasperReports Server using a Domain . The schema used when setting up the data source was :

CREATE FOREIGN TABLE cases (
CaseID VARCHAR(255) PRIMARY KEY,
CaseCurrentStatus VARCHAR(255),
ServiceName VARCHAR(255),
CaseLat FLOAT,
CaseLong FLOAT,
gender VARCHAR(255),
age INTEGER)
OPTIONS (UPDATABLE 'TRUE');

A link to a short video to explain the whole process of setting up Adhoc Data Exploration is found http://youtu.be/ahvzBZrlVaM

Feedback
randomness