使用变量创建动态流星集合

时间:2016-04-14 02:03:43

标签: javascript events meteor

我正在尝试使用变量创建动态流星集合,以便每次提交表单并执行事件时都会创建新的流星集合。请参阅下面的代码,了解我正在寻找的内容虽然不起作用。 (请记住,我仍处于早期生产阶段,因此我没有为调试目的设置特定的服务器或客户端。另外,忽略任何语法或结构错误,因为我只是输入了这个。只是如何让它工作)

预期结果:

假设用户1 meteor id为x533hf4j3i

假设用户2 meteor id为jf83jfu39d

OUTCOME:x533hf4j3ijf83jfu39d = new 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');
  }

});

1 个答案:

答案 0 :(得分: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()