Today I found some time to play with the new MongoDB aggregation framework. It's not an official, stable release yet, but I'm not thinking about putting it into production just yet.
I wanted to keep the existing instance on MongoDB intact, so I installed it in it's own directory and created a new data directory to mirror this need. These are the exact steps, if you're interested.
$wget http://www.mongodb.org/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.1.2.tgz/download
$mv download mongodb-linux-x86_64-2.1.2.tgz
$tar -zxvf mongodb-linux-x86_64-2.1.2.tgz
$sudo mkdir -p /usr/lib/mongodb/2.1.2
$sudo mv mongodb-linux-x86_64-2.1.2/* /usr/lib/mongodb/2.1.2/
$rm -r mongodb-linux-x86_64-2.1.2
$sudo mkdir -p /data/db-2.1.2
$sudo chown `id -un` /data/db-2.1.2
$/usr/lib/mongodb/2.1.2/bin/mongod --dbpath /data/db-2.1.2 --logpath /data/db-2.1.2/mongod.log
Now crack open a new terminal so you can connect.
$cd /usr/lib/mongodb/2.1.2/bin
$./mongo
MongoDB shell version: 2.1.2
connecting to: test
Thu Jul 19 11:40:14 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/ shell/mongo.js:91
exception: connect failed
Oh dear. But this shows mongod is running:
$ps -ef | grep mongod
/usr/lib/mongodb/2.1.2/bin/mongod --dbpath /data/db-2.1.2 --logpath /data/db-2.1.2/mongod.log
What does the log say?
$less /data/db-2.1.2/mongod.log
...
Thu Jul 19 11:40:35 [initandlisten] waiting for connections on port 27017
...
Hmmm. Let's try again.
$cd /usr/lib/mongodb/2.1.2/bin
$./mongo
Hmmm, now it's connecting. Well, I'm off to play with the aggregation framework now and I'll check this anomaly later.
The time now is 1625hrs and it looks like 2.2.0-rc0 has just been released. Let's give that a go.
$wget http://www.mongodb.org/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.2.0-rc0.tgz/download
$mv download mongodb-linux-x86_64-2.2.0-rc0.tgz
$tar -zxvf mongodb-linux-x86_64-2.2.0-rc0.tgz
$sudo mkdir -p /usr/lib/mongodb/2.2.0-rc0
$sudo mv mongodb-linux-x86_64-2.2.0-rc0/* /usr/lib/mongodb/2.2.0-rc0/
$rm -r mongodb-linux-x86_64-2.2.0-rc0
$sudo mkdir -p /data/db-2.2.0-rc0
$sudo chown `id -un` /data/db-2.2.0-rc0
$/usr/lib/mongodb/2.2.0-rc0/bin/mongod --dbpath /data/db-2.2.0-rc0 --logpath /data/db-2.2.0-rc0/mongod.log
Crack open a new terminal so you can connect.
$cd /usr/lib/mongodb/2.2.0-rc0/bin
$./mongo
MongoDB shell version: 2.2.0-rc0
connecting to: test
Thu Jul 19 16:33:41 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed
Is it running?
$ps -ef | grep mongod
/usr/lib/mongodb/2.2.0-rc0/bin/mongod --dbpath /data/db-2.2.0-rc0 --logpath /data/db-2.2.0-rc0/mongod.log
Yes, it is. Bugger, I can't connect. Let's take a look at the log again.
$less /data/db-2.2.0-rc0/mongod.log
...
Thu Jul 19 16:33:29 [initandlisten] journal dir=/data/db-2.2.0-rc0/journal
Thu Jul 19 16:33:29 [initandlisten] recover : no journal files present, no recovery needed
Thu Jul 19 16:33:31 [initandlisten] preallocateIsFaster=true 31.64
Thu Jul 19 16:33:33 [initandlisten] preallocateIsFaster=true 30.5
Thu Jul 19 16:33:37 [initandlisten] preallocateIsFaster=true 30.52
Thu Jul 19 16:33:37 [initandlisten] preallocateIsFaster check took 8.333 secs
Thu Jul 19 16:33:37 [initandlisten] preallocating a journal file /data/db-2.2.0-rc0/journal/prealloc.0
Thu Jul 19 16:33:40 [initandlisten] 304087040/1073741824 28%
Thu Jul 19 16:33:43 [initandlisten] 482344960/1073741824 44%
Thu Jul 19 16:33:46 [initandlisten] 650117120/1073741824 60%
Thu Jul 19 16:33:49 [initandlisten] 817889280/1073741824 76%
Thu Jul 19 16:33:52 [initandlisten] 985661440/1073741824 91%
Thu Jul 19 16:33:56 [initandlisten] preallocating a journal file /data/db-2.2.0-rc0/journal/prealloc.1
Thu Jul 19 16:33:59 [initandlisten] 272629760/1073741824 25%
Thu Jul 19 16:34:02 [initandlisten] 398458880/1073741824 37%
Thu Jul 19 16:34:05 [initandlisten] 555745280/1073741824 51%
Thu Jul 19 16:34:08 [initandlisten] 723517440/1073741824 67%
Thu Jul 19 16:34:11 [initandlisten] 912261120/1073741824 84%
Thu Jul 19 16:34:17 [initandlisten] preallocating a journal file /data/db-2.2.0-rc0/journal/prealloc.2
Thu Jul 19 16:34:20 [initandlisten] 304087040/1073741824 28%
Thu Jul 19 16:34:23 [initandlisten] 471859200/1073741824 43%
Thu Jul 19 16:34:26 [initandlisten] 629145600/1073741824 58%
Thu Jul 19 16:34:29 [initandlisten] 796917760/1073741824 74%
Thu Jul 19 16:34:32 [initandlisten] 964689920/1073741824 89%
Thu Jul 19 16:34:37 [initandlisten] waiting for connections on port 27017
Thu Jul 19 16:34:37 [websvr] admin web console waiting for connections on port 28017
Thu Jul 19 16:34:56 [initandlisten] connection accepted from 127.0.0.1:48357 #1 (1 connection now open)
Thu Jul 19 16:35:30 [conn1] end connection 127.0.0.1:48357 (0 connections now open)
Well, there you have it. It's pretty clear. It takes just over a minute between mongod starting up and it being ready for connections.
Top tip
Be patient young Jedi. Mongo is quick, but give it a moment to get out of bed and put on it's dressing gown between ringing the doorbell and banging on the door.