Я могу дать здесь несколько общих советов, но, в конце концов, вам решать, какой подход вы выберете.Вопрос, который вам нужно задать, чтобы определить, нужно ли встраивать или ссылаться на него:
Какие данные вам нужно вернуть при получении документа для большинства запросов?
Это может быть просто или сложно -если 99% ваших запросов будут возвращать те же 5 полей, ответ очевиден.Если вам редко понадобится какая-то часть данных, тогда это кандидат для отдельной коллекции.Вам нужен второй поиск, чтобы получить эти данные, и какая-то ссылка между ними, но редкость делает эти накладные расходы приемлемыми.
Естественно, если ваш набор данных и возвращаемые значения не так однозначны, то он становитсяболее сложный вопрос.
Если поле требуется часто, но не все оно необходимо (скажем, последние 5 записей в истории), сохраните их фиксированного размера в основном документе и оставьте остальные в отдельной коллекции.Это вызывает некоторые дубликаты и усложняет ваши обновления, но может быть хорошим компромиссом с точки зрения скорости.
С точки зрения минусов - большой встроенный документ сам по себе неплохой, но растущий, особенно с неограниченнымрост может быть плохим.Каждый раз, когда документ увеличивается, есть вероятность, что он будет слишком большим для выделенного ему пространства, что означает, что его придется перемещать.Мало того, что это несколько фрагментирует ваши данные, это может быть дорогой операцией для перемещения большого документа, выделения нового пространства - особенно если вы делаете это часто.Документы по коэффициенту заполнения объясняют это довольно хорошо (коэффициент заполнения добавляется при запуске хода):
http://www.mongodb.org/display/DOCS/Padding+Factor#PaddingFactor-Overview
Надеюсь, это поможет!