【问题标题】:Create a dynamic meteor collection using a variable使用变量创建动态流星集合
【发布时间】:2016-04-14 02:03:43
【问题描述】:

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

预期结果:

假设用户 1 的流星 id 是 x533hf4j3i

假设用户 2 的流星 id 是 jf83jfu39d

结果: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');
  }

});

【问题讨论】:

    标签: javascript events meteor


    【解决方案1】:

    不要这样做。新的流星开发人员会定期询问如何创建动态集合,但这绝不是正确的方法。 @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()
    

    【讨论】:

    • 感谢您的提示。我认为这是执行此操作的标准方法。但是如果我对所有消息都有一个集合,我觉得 1. 通过一百万条消息检索当前的聊天消息需要很长时间(假设我有几千个用户)和 2. 如果有人入侵了他们可以拥有的一个集合访问所有内容,而不仅仅是一次聊天。我对此很陌生,那么您的cmets对此有何看法?谢谢
    • 不要陷入过早优化的陷阱!但是当您需要时,您可以将索引添加到您的 MongoDB 集合以保持快速。 docs.mongodb.org/manual/indexes.
    • 安全性?使用订阅控制发送到客户端服务器端的内容。黑客不会“按收藏”进行,这是一个更大的问题。以这种方式存储数据不会影响应用的安全性。
    • 你为cmets。那个索引扫描仪看起来很棒。以前从未见过。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2015-10-16
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多