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
- added the parameter name (-path) to add-type, since the default param is looking for an assembly name, not a path to a DLL
- 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.