2015-01-29 2 views
0

У меня есть интернет-магазин, похожий на eBay. Есть продавцы и продавцы. У каждого продавца может быть 0 или более продуктов, которые он готов продать. Обычно на человека приходится около 30 человек.Я злоупотребляю документами MongoDB?

Сейчас у меня есть один документ на человека, и этот документ содержит информацию о пользователях и суб-документ, содержащий все продаваемые им товары (включая все фотографии, которые есть у продукта, цены, теги и т. Д.).

Я злоупотребляю документами MongoDB? Должен ли я делать это по-другому?

+0

@costa Покупатели могут видеть все товары (чтобы их можно было купить). Я просто не привык вкладывать все в один документ, и я беспокоюсь о последствиях, которые он может привести. Что, если продавец решит, что хочет продать 5000 предметов? Может ли MongoDB справиться с этим? – alexandernst

+2

http://docs.mongodb.org/manual/reference/limits/ – costa

+0

Я называю это дубликат. Вопрос о встраивании и задании задавался по-разному. – jcollum

ответ

1

Я бы предположил, что вы перемещаете свои продукты в отдельную коллекцию (например, products). Встроенные документы должны использоваться только тогда, когда документ, который вы внедряете, невелик или сумма ограничена. Кроме того, при выборе документов в отдельной коллекции будет использоваться greater flexibility.

В вашем случае вы, вероятно, будете иногда выбирать один продукт (например, просмотр для просмотра одного продукта), поэтому имеет смысл хранить продукты в отдельной коллекции.

+0

Это очень помогло мне. Поэтому я должен фактически хранить все продукты в другой коллекции, так как мне нужно будет отображать случайные продукты, запрашивать их в определенном порядке или с помощью определенных тегов (показать мне все красные продукты или показать мне все продукты весом более 2 кг) , Спасибо! Давайте посмотрим, могут ли другие что-то добавить. – alexandernst

1

Я бы предложил переместить продукты в отдельную коллекцию.

Схемы данных MongoDB являются лучшими, если они основаны на требованиях использования. В этом случае пользователи, просматривающие продукты, очень редко будут интересоваться всеми продуктами, которые продает другой пользователь. Обычно они будут интересоваться продуктами, которые соответствуют критериям поиска о цене и описании товара или названии позиции.

Итак, представьте себе поиск самых последних опубликованных материалов с учетом предложенной схемы данных. Ваш запрос должен будет искать в каждом массиве userproduct вложенных документах и ​​проверить timePosted. Принимая во внимание, что коллекция product может легко иметь индекс на timePosted и не требует необходимости прикосновения (user и каждого user других документов products).

Также важно рассмотреть вариант использования одной страницы продукта, а также указать отдельную коллекцию product.

Даже если вам не нужно, чтобы показать product сек, что конкретный user отвечал, это не будет трудно в product коллекции для поиска по user_id.

Смежные вопросы