Installing MongoDB on Mac OS X Mavericks for Node.js development

Date: Mon Sep 18 2017 MongoDB »»»» MacOS X setup »»»» Mongoose
This is part three of a series of blog posts exploring the set-up of MAMP-like development environment for Node.js on Mac OS X.  Earlier we looked at setting up Node.js on a Mac OS X machine, as well as using forever to keep server processes running.  In this installment we'll look at setting up a MongoDB instance.

MongoDB is an extremely popular NoSQL database that's document centric and offers a lot of flexibility.  The Node.js community has developed several Mongo drivers for use with Node.  My book (see links in sidebar) includes a section demonstrating using the Mongoose ORM library.  Both the MongoDB and Mongoose projects are sponsored by 10gen.

The first question to ask yourself is, why set up a local MongoDB instance at all?  There are several companies offering free or low cost MongoDB database services.  You could just do your software development work against one of those providers, and skip the headache of running your own server.

That's a great point and it's worth considering http://www.mongohq.com for your MongoDB needs.  But, it's not that simple.  For example in my book I'd listed two other companies, neither of whom now offer MongoDB hosting services.  You'd be putting your development environment at the risk of 3rd parties who might quit their business.  Also, do you trust your data to a 3rd party?

In any case, assuming you've decided to set up a local MongoDB instance, how do you go about it?

One way is to go here http://www.mongodb.org/downloads and get the Mac OS X download.  They also have installation instructions for use either with the download, or a source install using Homebrew.

What I've done instead, on my computer, is install it with MacPorts.

Why install using a package manager rather than the downloadable binary?  It's so that the package manager system will automagically update the software as new releases come out.

With MacPorts it's real simple to do:

$ sudo port install mongodb
Password:
---> Computing dependencies for mongodb
---> Dependencies to be installed: libpcap scons snappy
... lots of output as it builds other stuff
---> Building mongodb
---> Staging mongodb into destroot
---> Creating launchd control script
###########################################################
# A startup item has been generated that will aid in
# starting mongodb with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo port load mongodb
###########################################################
---> Installing mongodb @2.4.8_1
---> Activating mongodb @2.4.8_1

MongoDB is installed at this point, but not running.  As they note on the installation instructions (link above) you can simply run mongod with a local data directory, without having to mess around with getting Mac OS X to autostart the mongod process on system restart.  But, fortunately, MacPorts makes it easy to autostart MongoDB.

$ sudo port load mongodb
Password:
$ ps -eaf | grep mongo
0 35355 1 0 12:24PM ?? 0:00.01 /opt/local/bin/daemondo --label=mongodb --start-cmd sudo -u _mongo /opt/local/bin/mongod --dbpath /opt/local/var/db/mongodb --logpath /opt/local/var/log/mongodb/mongodb.log --logappend ; --pid=exec
0 35356 35355 0 12:24PM ?? 0:00.01 sudo -u _mongo /opt/local/bin/mongod --dbpath /opt/local/var/db/mongodb --logpath /opt/local/var/log/mongodb/mongodb.log --logappend
506 35357 35356 0 12:24PM ?? 0:00.11 /opt/local/bin/mongod --dbpath /opt/local/var/db/mongodb --logpath /opt/local/var/log/mongodb/mongodb.log --logappend
501 35364 485 0 12:24PM ttys001 0:00.00 grep mongo

Now, MongoDB is running, and will auto restart when the computer starts.

You can play with the mongo install like so:

mainmini:t david$ mongo
MongoDB shell version: 2.4.8
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
>
>
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce

show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell

The Getting Started notes are also useful for verifying the install went well.

Over on the Mongoose website they have a quick start guide.

There are plenty of other MongoDB tools available in the npm registry :- https://npmjs.org/search?q=mongodb