I recently completed a course with MongoDB University – MongoDB basics. I had read a lot about Mongo but this was the first time more hands with Mongo. For those of you new to MongoDB it is basically a document database – expressed using a JSON syntax. It is one of the many “NoSQL” variants – so it scales well horizontally and doesn’t follow a relational model.
To me I see a document database as a hierarchical data store- in that documents are really a hierarchy of information put together for ease of use and performance. As in many data cases – there are times when this model adds a lot of value and ones where it doesn’t. Being that this is a hierarchical data store the major design choice comes down to whether you embed (make a part of) or reference (point to something else). As in most cases you still need to know what the data is you have – regardless of how it is going to be stored. Then you make some choices that end up with tradeoffs. The key design principle seems to be defining your aggregate boundaries.
The other interesting thing I noticed was the rich query language – which while is not SQL – has a a lot of similarity with it.