2015-04-15 2 views
1

Я новичок в MongoDB, перемещающемся из традиционного реляционного подхода SQL. Я работаю над простым сценарием «Категория имеет много продуктов» (C# .Net). Где Категория имеетmongodb one to many relation

List<Product> 

Мои вопросы.

  1. Вопрос 1: В окне «Добавить продукт» у меня есть раскрывающийся список категорий. So on Submit is I Первый Вставьте Продукт в коллекцию продуктов, а затем Нажмите этот продукт в коллекции вложенных продуктов категорий.

    _categoryCollection.Update (идентификатор, обновление < Категория> .С ...)

  2. Вопрос 2: Или Мы должны не просто иметь что-нибудь под названием «Коллекция продукта». Вместо этого у нас должна быть только одна коллекция категорий с вложенными продуктами. И на submit просто нажмите этот новый продукт в соответствующей категории.

    Вопрос 2.1. Что делать, если мы хотим сделать эту связь для продукта с категорией после добавления продукта. ?

  3. or Вопрос 3: Учитывая вопрос один. Должен ли мы иметь CategoryId в объекте Product? это имеет смысл в No SQL-концепциях?

ответ

0

Я всегда находил эту статью MongoDB хорошим ресурсом для таких вопросов.

http://docs.mongodb.org/ecosystem/use-cases/product-catalog/

вопросы, которые вы должны спросить это, как будет доступ к данным? Каковы мои объекты и как они формируются? Сначала начните свое программирование, создайте свои классы (объекты домена) и ваши шаблоны доступа, а затем о Mongo. Вы увидите, Монго не будет мешать вам. Это то, что нужно было сделать.

Итак, вернемся к вашему сценарию. Если вы знаете, что категории будут большими по размеру, их нужно тщательно контролировать и манипулировать, тогда у вас может быть вторая коллекция для них и ссылка на поле _id этой коллекции в поле категории в документах продукта. Важно отметить, что сами значения для категорий должны храниться вместе с каждым документом продукта, чтобы иметь возможность быстрого чтения из-за одного меньшего запроса или необходимости объединения данных.

Скотт

+0

Я получил вашу точку , но если я хочу хранить отдельные документы. это двухступенчатый процесс, когда когда-либо я вставляю в продукты i.e. I Сначала вставляем продукт в коллекцию продуктов, а затем вставляем этот продукт в коллекцию вложенных продуктов категорий? –

+0

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

+0

, но в моем приложении я хочу, чтобы пользователи добавляли категории, а затем выбирали категорию при добавлении продуктов. –

0

Несколько соображений можно сделать здесь: только

If a category has many products but a product cannot belong to more than one category, then 
    If number of products is not expected to be very large per category, then 
     Nest products inside category document 
    Else, use a different collection for products and use field 'categoryId' in them 
Else, use use a different collection for products and use field 'categoryId' in them 

Nest документы, если они имеют одно несомненное родителей, и они не являются огромными, или слишком много. В противном случае родительский документ станет огромным, без возможности контролировать его размер.

+0

Я получил вашу точку , но если я хочу хранить отдельные документы. это двухступенчатый процесс, когда когда-либо я вставляю в продукты i.e. I Сначала вставляем продукт в коллекцию продуктов, а затем вставляем этот продукт в коллекцию вложенных продуктов категорий? –

+0

Если вы поддерживаете две коллекции, не будет вопроса о гнездовании. Таким образом, вы нажимаете продукт в своей коллекции с заполненным полем categoryId. Затем вы можете использовать это поле для объединения этих коллекций. –