2016-12-02 4 views
0

Я пытаюсь создать небольшой сайт, на котором люди могут заказывать пользователей на дневные концерты. Я использую пакет счетов от метеора, и мой план должен приложить следующее:Проектирование схемы доступности mongodb/meteor

user.availability: [ 
        { 
         status: n, //where n is 0-# of status types (5 atm) : single char rather than float 
         date: ddmmyyy, //string as well, no need for time as its day long 
         job_id: {Job} 
        }, ... 
        ] 

Работа только имеет информацию, как, где, что, когда.

Есть 5 штатов: нейтрально, доступно, явно недоступно, забронировано, удержание. Пользователи естественно нейтральны и явно должны заявить о доступности. Они выбирают между первыми тремя состояниями: n, a, u и разрешено устанавливать доступность максимум две недели в будущем. Работа «дающие» - это те, которые устанавливают другие два состояния готовности. Нейтральное состояние для меня означает, что им не нужна запись в db (массив user.availability).

Этот стиль устанавливает меня на следующий запрос:

db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }}); 

И когда пользователь входит в систему/доступ к сайту, я могу стереть какие-либо параметры доступности, которые они имеют за период до текущей даты. Неактивные пользователи обрезаны на гораздо более длительный интервал.

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

спасибо.

+1

На первый взгляд это кажется прекрасным. Поскольку вы держите даты как строки, вы не можете выполнять поиск по дате, но с горизонтом в 2 недели, что не имеет большого значения. Однако один запрос не является идеальной схемой. Вы должны думать о других запросах, которые могут возникнуть позже. Кто работал в прошлом месяце? Какие концерты были отменены или не были показаны? Кто является лучшим доступным человеком для проведения концерта (например, на основе навыков и близости)? –

+0

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

ответ

1

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

Вы можете использовать пакет fullcalendar для отображения (дневных) событий - он будет делать много работы для вас, когда вы сможете отображать просмотры месяца/недели/дня по мере необходимости, и вы можете цветовым кодом заказывать как тебе нравится. https://atmospherejs.com/fullcalendar/fullcalendar

+0

Связать каждую дату с идентификатором пользователя или связать весь список доступных дат с идентификатором пользователя? –

+1

Каждый документ о доступности должен включать пользователь '_id' в качестве внешнего ключа в основном. –

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