How to return JSON from MongoDB in Node.js?

I was able to answer my question with help from node's native monogodb driver github page: See here.

In essence, what I did was to define my exported function within the MongoClient's connection function. For some reason I thought node exports had to be in the root of the module, but that's not the case. Here's a finished version:

'use strict';

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');

// db url
var url = 'mongodb://localhost:27017/pokemon';

var findDocuments = function(db, callback) {
  // Get the documents collection
  var collection = db.collection('pokemons');
  // Find some documents
  collection.find({name: 'Dratini'}).toArray(function(err, docs) {
    assert.equal(err, null);
    // assert.equal(2, docs.length);
    console.log("Found the following records");
    callback(docs);
  });
}

// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  console.log("Connected correctly to server");
  findDocuments(db, function(docs) {
    console.log(docs);
    exports.getPokemonByName = function() {
      return docs;
    }
    db.close();
  });
});

And then in another file:

var express = require('express');
var router = express.Router();

router.get('/pokedex', function (req, res) {
  res.jsonp(db.getPokemonByName());
});

Of course, this solution requires that I hardcode queries, but I'm okay with that for now. Will cross that bridge when I come to it.


Found a simple tweak for this. Let say the callback to the findOne returns result then you can convert the result to JSON object like this

result = JSON.parse(JSON.stringify(result))

Now you can access the result and its fields simply with the dot operator.


this may help

var cursor =  db.collection('pokemons').find({name:name}).toArray(function(err,arr){
    return arr;
 });