Main choices for structuring the data are:
- For "one-to-few", you can use an array of embedded documents
- For "one-to-many?, or on occasions when the "N" side must stand alone, you should use an array of references. You can also use a "parent-reference" in the "N" side if it optimizes your data access pattern.
- For "one-to-squillions", you should use a "parent-reference" in the document storing the "N" side.
Once you've decided on the overall structure of the data, then you can, if you choose, denormalize data across multiple documents, by either denormalizing data from the "One" side into the "N" side, or from the "N" side into the "One" side. You'd do this only for fields that are frequently read, get read much more often than they get updated, and where you don't require strong consistency, since updating a denormalized value is slower, more expensive, and is not atomic.
Reference: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1