Meteor, динамически определять коллекции

#mongodb #coffeescript #meteor

#mongodb #coffeescript #meteor

Вопрос:

Мы работаем над приложением и должны иметь возможность создавать новые коллекции Mongo «на лету». В настоящее время у нас есть такой код, как этот:

 @Global = new Meteor.Collection('global')
 

У нас есть документ в этом mongo collections, который выглядит следующим образом:

 { "title" : "room_list", "room_list" : ['chat1', 'chat2'], ... }
 

Теперь я хочу настроить некоторый тип цикла или конструкции, который в основном создавал бы следующее

 @chat1 = new Meteor.Collection('chat1')
@chat2 = new Meteor.Collection('chat2')
 

Похоже, нам нужна функциональность такого типа, чтобы иметь возможность создавать новые коллекции данных «на лету».

Мы изучаем какой-то тип объявления динамической переменной или есть лучший способ динамического создания новых коллекций meteor?

Ответ №1:

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

Возможно, вы захотите проверить https://github.com/mizzao/meteor-partitioner пакет, который я создал, разработан специально для этой цели и включает в себя пример того, как это сделать для нескольких комнат чата. Вы также можете увидеть https://github.com/mizzao/CrowdMapper для реализованного примера.

Комментарии:

1. Это выглядит многообещающе, но меня беспокоит одна вещь. В нашем приложении мы хотим, чтобы наши пользователи могли находиться в более чем одной комнате чата в любой момент времени, и кажется, что с разделителем это невозможно? Partitioner.setUserGroup(userId, groupId) в ваших документах API говорится, что он будет выдавать ошибки, если пользователь попытается одновременно использовать более одного?

2. Вы не хотели бы использовать partitioner для нескольких комнат чата одновременно; вы бы просто создали свою собственную схему индексации. В любом случае, сообщения чата должны быть в одной коллекции, и должен быть индекс для комнаты каждого сообщения, а не отдельная коллекция для каждой комнаты.

3. У нас есть и другие вещи, помимо простого использования коллекции только для сообщений. Итак, возвращаясь к первоначальному вопросу: возможно ли создать динамические комнаты, как я написал выше?

4. Вы можете, но, вероятно, столкнетесь с ограничениями на максимальное количество коллекций, которые вы можете иметь в Mongo . Я не вижу никаких причин, по которым вы хотели бы сделать это таким образом. Если бы вы просто сформулировали свою проблему немного более кратко (возможно, в другом вопросе) Я уверен, что кто-то может предложить удовлетворительный подход.