Единственное изменение, которое я хотел бы сделать, - это то, как вы храните штампы, которыми владеет пользователь. Я бы сохранил массив объектов, представляющих марки и дублирующие значения, к которым чаще всего обращаются.
Например, что-то вроде этого:
{
_id : objectid,
Name: "bob",
Email: "bob@bob.com",
...
Stamps : [
{
_id: id,
type: 'type',
price: 20,
forSale: true/false,
quantity: 2
},
{
_id: id2,
type: 'type2',
price: 5,
forSale: false,
quantity: 10
}
]
}
Вы можете видеть, что некоторые данные дублируются между коллекцией марок и массивом марок в пользовательской коллекции. Вы делаете это со свойствами, которые вы получаете доступ чаще. Потому что в противном случае вам придется делать findOne для каждой марки, и лучше читать непосредственно данные, которые делают это в MongoDB. И таким образом вы можете добавить другие свойства, такие как количество и forSale, здесь.
Цель дублирования здесь состоит в том, чтобы избежать запуска запроса для каждого штампа в массиве.
Существует ссылка на видео, в котором обсуждается дизайн MongoDB, а также объясняется то, что я пытался объяснить здесь.
http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/