2015-11-29 4 views
0

Я полный новичок в Meteor и MongoDB, а базы данных в целом так жаль заранее.MongoDB и Meteor.js - ссылки «один-ко-многим»

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

Итак, вот что у меня есть.

galleryItems = new Mongo.Collection("galleryItems"); 
galleryTags = new Mongo.Collection("galleryTags"); 

Две коллекции в Монго. Один для элементов и один для тегов.

И у меня есть форма, которая вставляет эти две базы данных.

galleryItems.insert({ 
    text: text, 
    url: url, 
    thumbnail: thumbnail, 
    createdAt: new Date() 
    }); 

    galleryTags.insert({ 
    tags: tags, // tags is just an array I have created before this 
    }); 

Я действительно зациклился на том, как связать две коллекции вместе.

ответ

0

В MongoDB я иногда целенаправленно избегаю нормализации моих данных. Это связано с тем, что ссылки не так просто работать с базами данных на основе документов. Метеор не облегчает. Обычно это делается в MongoDB - embedded documents are by nature denormalized, например. Есть хорошая информация о data models on the official MongoDB homepage.

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

Но если вы действительно действительно хотите нормализовать свои данные, вот как вы это сделаете. Ваша коллекция galleryItems будет иметь поле под названием tags, в котором будут храниться теги _id. Например:

galleryItems: { 
    text: text, 
    url: url, 
    thumbnail: thumbnail, 
    createdAt: new Date(), 
    tags: [1, 2, 3] 
} 

И тогда вы бы иметь galleryTags коллекцию, в которой хранятся сведения о тегах:

galleryTags: { 
    _id: 1 
    name: tagName 
} 

Теперь у вас есть ссылки на теги в galleryItems, но galleryItems не хранит любая информация о самих тегах - для получения данных о тегах вам придется выполнить запрос для этого отдельно.

+0

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

+0

@JordanOverbye Если ваши теги не имеют данных, кроме имени, тогда просто нет смысла. – Oskar

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