2016-05-25 1 views
1

В следующем блоге, есть пример:MongoDB схемы Дизайн Продукты с детьми Продукция

http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1

где продукт может иметь множество частей db.parts.findOne() { _id : ObjectID('AAAA'), partno : '123-aff-456', name : '#4 grommet', qty: 94, cost: 0.94, price: 3.99 }

db.products.findOne() { name : 'left-handed smoke shifter', manufacturer : 'Acme Corp', catalog_number: 1234, parts : [ // array of references to Part documents ObjectID('AAAA'), // reference to the #4 grommet above ObjectID('F17C'), // reference to a different Part ObjectID('D2AA'), // etc ]

Я имею в виду делать что-то подобное, за исключением того, что Продукт может быть изготовлен из многих Продуктов (т. е. у них будет одна и та же схема). Воздействие на окружающую среду Продукта будет тогда суммой воздействия на окружающую среду детей. Эти дети, в свою очередь, могут быть их собственным родительским продуктом для других детских продуктов, таких как дерево.

Чтобы сделать проект для обновлений менее сложным, если воздействие на окружающую среду ребенка изменилось, оно не будет автоматически распространять изменение цепи. Родитель может видеть из временной метки обновления для детей, что он является более поздним, и имеет возможность обновлять свои поля с помощью пересчета через веб-интерфейс.

Я новичок в MongoDB, поэтому просто хочу запустить этот проект схемы сообществом, чтобы узнать, есть ли какие-либо потенциальные подводные камни, чтобы следить за этим подходом. Благодарю.

+0

Btw, если ваши номера деталей уникальны по частям (обычно это такие вещи), вы можете просто сохранить их как значение '_id' или сохранить' {"partno": "123-aff-456"} 'as значение '_id'. – PaulMcG

+1

Пожалуйста, сообщите нам, что вы хотите точно моделировать. Может быть, тогда мы сможем помочь вам больше. –

+0

Фрэнк, вы все еще ищете ответ или предоставили достаточное количество? –

ответ

1

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

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

https://docs.mongodb.com/manual/applications/data-models-tree-structures/

Моего решения было бы «Структура модели дерева с массивом Предков» Таким образом, вы можете получить все потомок в одном запросе и связанные с ними воздействия на окружающую среду. Это предполагает сохранение только _id в

parts : [{_id: 1}, {_id: 2}, ...] 

, а затем отслеживать родитель и бабушка и дедушка, и прадед, и т.д. в массиве предков как таковые:

ancestors: [{_id: 3}, {_id: 2}, {_id: 1}, ...] 

увидеть ссылку на ясный объяснение этого шаблона.

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