Design your Database schema in according to user requirement . Optimize your schema for most frequent use case. Combine objects into one documents if you will use them together, otherwise separate them. Duplicate the data because disk space is cheaper than computing time . Basically avoid joins however do while writing, not during reads. Don't insert mixed data-type values into one common fields, it can degrade performance. Do complex aggregation in schema. Do Capped Collection for fast writing on collection. Use Natural/default Order to read collection. Create index in Background . (offline). Avoid not in and not equal to operation . $ne and $nin .
Connecting, Sharing and Discovering