This simple MongoDB tutorial is for you if:
- you’re completely new to MongoDB and just want to do SOMETHING with it
- you have MongoDB running but forgot the particulars of using the MongoDB shell
- you want to look inside your db and confirm data’s actually getting written to it
- you rebooted and lost your Mongo server and you can’t remember how you got it running in the first place
- you don’t want to wade through the documentation again
Or, you’re just me in the future looking for where I wrote this down. You’re welcome, future self.
1. Install Mongo!
Install steps are better covered by Mongo itself: official MongoDB
2. Start Mongod
These steps differ by OS.
Mac / Linux
On my Mac machine, I can start mongod from anywhere because it’s in my $path (see this guide for steps on adding MongoDB to your $PATH).
Just use:
mongod
Successful connection looks something like:
Windows
On my Windows machine, I have to navigate to Mongo’s installation folder to start mongod. Open Terminal (Mac) or Command Prompt (Windows). Navigate all the way into the bin folder. On my Windows machine, my mongo folder is here:
J:\mongo\mongodb\bin
Now use:
mongod
On Windows, I see a connection spam scroll by. Leave this window open and go to the next step.
Problems starting Mongodb?
If you get the “Unable to lock file: data/db/mongod.lock. Is a mongod instance already running?” problem, you probably have multiple instances of mongodb already running. This can happen as you switch projects, switch between user accounts on the same machine, etc.
To fix it, do this to list your computer’s processes and filter them to just mongo (this example is from when I had the problem on my Mac):
ps aux | grep mongo
On my machine, running that command revealed a couple instances of mongo already running (these were started by Jim using a separate account on the same computer). The third process in the list (the one owned by mjgrant) is the grep itself.
Because my mongo instance was started by “root” (another Mac account, really), I had to be all dirty and use sudo to kill it by its process number (second column from the left).
sudo kill 61180
If you run the ps aux command again, you should see that there are now no instances of mongo running. If there are, just kill them using the same steps.
But what’s this? Trying to start mongo gives me this error now:
2015-04-26T11:30:11.114-0700 [initandlisten] couldn't open /data/db/memry_database.ns errno:13 Permission denied 2015-04-26T11:30:11.114-0700 [initandlisten] error couldn't open file /data/db/memry_database.ns terminating 2015-04-26T11:30:11.114-0700 [initandlisten] dbexit:
Rather annoyingly in our shared-computer situation, mongo’s knowledge of databases transcends user accounts. Navigating up to /data/db I can see all the databases on this computer. cbm_database is the one I’m trying to use, but mongo is choking on trying to access Jim’s memry_database.
I check their permissions…
ls -la
When asked why his databases belong to “root”, Jim says, “I probably did it wrong” :D Alas, we don’t know how we ended up with databases belonging to “root”, but Jim must have been using mongo as a root user, hence why he didn’t run into problems accessing databases owned by mjgrant.
Anyway… I used chown to assign ownership of these rogue root databases to my own account to unblock my work. (Standard disclaimer applies: use sudo with caution.)
sudo chown mjgrant memry_database.ns sudo chown mjgrant memry_database.0
I run ls -la again and confirm that now I own all of the databases.
Now you should be able to start MongoDB with…
mongod
And now you should see the connection data:
3. Start the Mongo Shell
Open a new window (and navigate again to the bin folder if you’re on Windows).
mongo
This line starts up the Mongo shell.
(So to recap, mongod has to happen before mongo.)
On Mac:
On Windows:
MongoDB shell version: x.x.x
connecting to: test
You can now start your localhost server. (If you were blocked by Error: failed to connect to [localhost:27017] that should now be resolved.)
From here on out, commands you type into the command line will be mongo-specific.
3. Viewing your MongoDBs
Let’s say you want to see your databases:
show dbs
show dbs delivers a list of your databases. You should see something like this in your terminal window after you type it:
On mine, the result is:
> show dbs
admin <empty>
local 0.078GB
meals-development 0.078GB
4. Using your Mongo DBs
These are your database names. Go inside them with “use”:
use meals-development
Once you’re “using” a database, though, the terminal doesn’t give much clue as to what to do next.
5. Viewing Collections
A collection is a group of MongoDB documents. Generally, they’re similar in purpose, but they don’t have to conform to one shared schema. You can see collections inside a db by typing:
show collections
As an example, inside my recipes-development example I have:
meals
system.indexes
Ah hah, finally. Now I know the name of the collection that contains my recipe (meal) data.
6. Look inside a collection
We’re almost to the good part. To see inside the meals collection, type:
db.meals.find()
You should get a number of objects with ids, names, etc. Each object will start with something like: { “_id” : ObjectID<“544dabfba054…
That’s it!
This was just a short guide to my most commonly used MongoDB shell commands. When I’m setting up a new db, I use these steps to look inside my db and see if data is being saved the way I expect it to.
Helpful Links
- MongoDB documentation: Getting Started with MongoDB.
- How to install MongoDB on Mac OS X