As promised in my previous post, I am going to introduce you to a project that I’ve been working on with a great team of people on GitHub. NoRM is a .net library to interact with the document-oriented database MongoDB. We set about doing this in a way that makes sense for the C# developer who doesn’t want to spend an inordinate amount of time configuring the database. As you’ll see in a moment, with NoRM, there’s very little you need to do to get started with MongoDB. NoRM stands for “No Object-Relational Mapping” - it seems that people are concerned about leaving relational databases because they’ll lose the low-friction environments they’ve come to expect (think ‘LINQ-to-SQL’). Another concern around moving to a NoSQL option is the notion that these datastores carry little or no structure. By creating a strongly-typed interface to MongoDB, I feel that we have addressed both of these concerns. So, just to whet your appetite, here’s an example of how you’d use NoRM to store some widgets.
That’s just a taste of the simplicity that is NoRM, there’s a huge amount of functionality that I’m not covering including:
- Fluent configuration
- Solid LINQ support
- Advanced update capabilities (update single or multiple documents that match template documents)
- Map/Reduce functionality.
- Support for MongoDB operators via the “Q” (Qualifiers) and “M” (Modifiers) classes.
- If you need it, “Weakly-typed” interaction via the “Expando” class.
- Bulk-insert capability (a la SqlBulkCopy)
Aside from actual “features”, there are lots of elements that make software good, here’s a few things I think make NoRM awesome: Tests: We have more than 400 tests that verify the functionality found in NoRM, and although we have just reached the v0.9.0 milestone, the library is very stable, and I am aware of production deployments using NoRM, today.
Participation: I started NoRM in the last few days of January 2010, and have seen incredible participation from the Open Source community - I’ve learned a lot about what people do — and don’t — need in a library, and some of the interesting pieces of helping to shape an Open Source project (hopefully I can share that in another blog post). We have a vibrant community at Google Groups. Pragmatism and Experience: I am routinely impressed by the ideas and code that the project’s contributors bring forward.
Please download and use the library: Stable Milestone Project Page the master branch will always “Stable”. Remember that we want NoRM to be the best C# driver for MongoDB possible, so please give us feedback, either in theGoogle Group or follow me on twitter (@atheken).
Cheers.