2016-04-14 3 views
1

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

Предназначенный результат:

Предположим, что пользователь 1 метеора идентификатор x533hf4j3i

Предположим, что пользователь 2 метеора идентификатор jf83jfu39d

рЕЗУЛЬТАТ: x533hf4j3ijf83jfu39d = новый Mongo.Collection ('') x533hf4j3ijf83jfu39dmessages


этот пример кода, который не работает

Template.createChat.events({ 
    'submit form': function(event){ 
    event.preventDefault(); 
    var messageRecipientVar = event.target.messageRecipient.value; 
    var currentUserId = Meteor.userId(); 
    var recipientUserId = Meteor.users.findOne(messageRecipientVar)._id; 
    var chatCollectionNameVar = {$concat: [currentUserId, recipientUserId]} 
    var chatCollectionName = {$concat: [currentUserId, recipientUserId, "messages"]} 

    chatCollectionNameVar = new Mongo.Collection('chatCollectionName'); 
    } 

}); 

ответ

2

Не делайте этого. Спросить, как создавать динамические коллекции, периодически возникает с новыми разработчиками метеоров, но это никогда не бывает правильным. @ david-wheldon имеет отличное описание, почему бы не сделать это внизу this page.

Просто используйте один сборник Messages, содержащий документы, что-то вроде этого:

{ _id: xxxxxx, 
    sender: 'x533hf4j3i', 
    recipient: 'jf83jfu39d', 
    message: 'Hi there!', 
    ... 
    timestamp, etc 
    ... 
} 

Тогда это зависит от вашего приложения, если пользователь может просматривать сообщения, они не отправить/получить, и если вам нужна фильтрация этого вам будет делать это на стороне сервера в функции публикации.

В любом случае, на клиенте, если вы просто хотите, чтобы сообщения между двумя пользователями, вы запрашивающих как это:

chatMessages = Messages.find(
    {$or: [{ sender: 'x533hf4j3i', recipient: 'jf83jfu39d'}, 
      { sender: 'jf83jfu39d', recipient: 'x533hf4j3i'} 
    ]}).fetch() 
+0

благодарю вас за отзыв. Я понял, что это стандартный способ сделать это. но если бы у меня была одна коллекция для всех сообщений, я чувствую 1. потребуется много времени, чтобы получить текущие сообщения чатов через миллион сообщений (при условии, что у меня было несколько тысяч пользователей) и 2. если кто-то взломал одну коллекцию, доступ к КАЖДОМУ, а не только одному чату. Я довольно новичок в этом, так что ваши комментарии к этому? спасибо –

+1

не попадайте в ловушку для оптимизации преждевременно! Но когда вам нужно, вы можете добавить индексы в свою коллекцию MongoDB, чтобы поддерживать ее быстро. https://docs.mongodb.org/manual/indexes/. – JeremyK

+0

Безопасность? Контролируйте, что отправляется на сервер клиента с подписками. Взлом не будет «за коллекцию», и это гораздо более важный вопрос. Сохранение ваших данных таким образом не повлияет на безопасность вашего приложения. – JeremyK

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