I try to have the least collections possible,for simplicity and performance.
1)embeded documents/arrays ,with indexes
2)if query from many locations , separate and duplicate data
3)if many updates on duplicated data , references in arrays and joins
See this topic,the answer from Michael Höller
He gathered additional links that can help