This is a very important point in Mongo, and the answer is a bit more art than science. Having one collection full of gigantic documents is certainly an anti-pattern, because it works against many features of Mongo.
For example, when receiving documents, you can extract the entire document from the collection (not quite true, but mostly). Therefore, if you have huge documents, you extract huge documents every time. In addition, the presence of huge documents makes it less dangerous, since only top-level documents are indexed (and therefore postponed) in each collection. You can index values deep into the document, but the index value is associated with a top-level document.
At the same time, purely relational is also an anti-pattern, because you have lost significant referential integrity by going to Mongo first. In addition, all connections are made in the application memory, so each of them requires a full reverse (slow).
So, the answer is to do something in between. I think you probably want to put together a collection for people and another collection for business in this case. I am talking about this because it seems that companies have enough metadata that can be a lot saturated. (In addition, I treat individual-business relations as many, many). However, a person may have a Name object (with parameters first and last ). It would be a bad idea to make Name in a separate collection.
Some information from 10gen about circuit design: http://www.mongodb.org/display/DOCS/Schema+Design
EDIT
In addition, Mongo has limited transaction support - in the form of atomic aggregates. When you insert an object in mongo, the whole object is either pasted or not pasted. Thus, you are an application domain that requires consistency between certain objects, probably you want to save them in one document / collection.
For example, consider an application that requires User always have a Name object (containing FirstName , LastName and MiddleInitial ). If a User were somehow inserted without the corresponding Name , the data would be considered corrupted. In a DBMS, you must wrap the transaction around operations to insert User and Name . In Mongo, we make sure that Name is in the same document (aggregate) as User to achieve the same effect.
Your example is a little less clear, since I do not understand the point. One thing that comes to mind is that Mongo has excellent support for inheritance. It may make sense to put all users, individuals, and potentially enterprises in the same collection (depending on how the application is modeled). If one person has many contacts, you probably want individuals to have an array of identifiers. If your application requires a quick view of contacts, you can consider duplicating part of an individual user and saving an array of contact objects.
If you are used to thinking RDBMS, you probably think that all your data should always be consistent. The truth is that probably not quite so. This concept of applying atomic aggregates to a domain has been widespread recently by the DDD community. When you carefully examine your domain, as your business users do, the boundaries of consistency should become clear.