PowerShell and MongoDB

I recently saw this link on using NoSQL with Windows.  Now, I'm a SQL Server DBA, so I haven't really had any reason to use NoSQL.  I was curious about how easy it was going to be to set up and if I could get it working with PowerShell.

I selected MongoDB from the list because it looked more like something that would be used on smaller-scale projects.

I then googled "MongoDB PowerShell" and found this link from Doug Finke about using MongoDB with PowerShell (and F#, which is another "cool thing" I haven't managed to find a need for).  Doug links to another article which explains setting up MongoDB and an open-source .Net driver for MongoDB called mongo-csharp.  He then follows up with a straight-forward script showing simple usage of MongoDB.  It looks like an almost literal translation of the C# code from the article he references.  With those in hand, I thought it was going to be a slam dunk.

It was, but I had a few hurdles to get over before I could get it working.  There weren't any problems with the code;  it was written about a year ago, so it was using PowerShell 1.0 and an older version of mongo-csharp.  I had to update the script in a couple of places to make it work.  I probably wouldn't even write it up, given how minor the changes are, but I was somewhat disappointed with the number of hits I got for "MongoDB PowerShell".

Here's the updated script:


add-type -Path .MongoDB.Driver.dll
$mongo=new-object mongodb.driver.mongo

$mongo.connect()

$db=$mongo.GetDataBase("movieReviews")

$movies=$db.GetCollection('Movies')
$movie=new-object Mongodb.driver.document

$movie['title']='Star Wars'

$movie['releaseDate']=get-date

$movies.Insert($movie)
$spec=new-object Mongodb.driver.document

$spec['title']='Star Wars'

$movies.FindOne($spec)

The two changes were

  1. added the parameter name (-path) to add-type, since the default param is looking for an assembly name, not a path to a DLL
  2. changed $mongo.GetDB to $mongo.GetDatabase to reflect a change in the driver

Worked fine. Not sure how I'll use this, but if I need to, I know I can from PowerShell.

-Mike