Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Meteor中从二级集合进行查找_Meteor_Handlebars.js - Fatal编程技术网

如何在Meteor中从二级集合进行查找

如何在Meteor中从二级集合进行查找,meteor,handlebars.js,Meteor,Handlebars.js,我正在Meteor中构建一个简单的聊天客户端。聊天信息存储在Chats集合中,该集合具有一条包含该信息来自的用户id和该信息发送给的用户id的信息,以及该信息,如下所示: { "_id" : "3Wo3EHYG8oPCS4TCc", "message" : { "from" : "oSiKCdvCHGrfnfQoT", "to" : "ESXbJXeWmNanz7zKq", "text" : "Hello

我正在Meteor中构建一个简单的聊天客户端。聊天信息存储在Chats集合中,该集合具有一条包含该信息来自的用户id和该信息发送给的用户id的信息,以及该信息,如下所示:

   {
     "_id" : "3Wo3EHYG8oPCS4TCc",
     "message" :
      {
         "from" : "oSiKCdvCHGrfnfQoT",
         "to" : "ESXbJXeWmNanz7zKq",
         "text" : "Hello"
       }
    }
用户存储在集合Users中,该集合具有id和用户名:

    meteor:PRIMARY> db.users.find()
    { "_id" : "oSiKCdvCHGrfnfQoT", "username" : "user1" }
    { "_id" : "ESXbJXeWmNanz7zKq", "username" : "user2" }
我有一个HTML页面,显示如下消息

<body>
  <h1>Test</h1>
  {{> hello}}
</body>

<template name="hello">
  {{#each messages}}
    From {{message.from}} to {{message.to}}: {{message.text}}
  {{/each}}
</template>
这将创建以下输出:

   Test
   From oSiKCdvCHGrfnfQoT to ESXbJXeWmNanz7zKq: Hello

但是,在HTML页面中,我想查找用户的用户名,而不是显示他们的原始ID。我知道我可以将用户名存储在Chats集合中,但我宁愿保持它的干净。当然,我也可以在template helper函数中进行查找,并创建一个新的数据结构,它模仿消息,但用用户名替换ID。然而,这是一个相当笨拙的解决方案,我宁愿在HTML端进行查找。这是可能的吗?

以下是一种可以在所有模板中使用的方法:

Template.registerHelper('username',function(userId){
  var user = Meteor.users.findOne(userId);
  return user && user.username;
});
然后在任何模板中,您只需执行
{{username message.from}
(例如),用户名就会自动插入

Template.registerHelper('username',function(userId){
  var user = Meteor.users.findOne(userId);
  return user && user.username;
});