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