如何从 Meteor 中的二级集合中进行查找
How to do a lookup from a secondary collection in Meteor
我正在 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>
使用以下模板助手:
Chats = new Mongo.Collection("chats");
Users = new Mongo.Collection("users");
import './main.html';
Template.hello.helpers({
messages:function(){
return Chats.find();
}
})
这将创建以下输出:
Test
From oSiKCdvCHGrfnfQoT to ESXbJXeWmNanz7zKq: Hello
但是,在 HTML 页面中,我想查找用户的用户名,而不是显示他们的原始 ID。我知道我可以将用户名存储在 Chats 集合中,但我宁愿保持它干净。当然,我也可以在模板辅助函数中进行查找,并创建一个新的数据结构,它模仿消息,但将 ID 替换为用户名。然而,这是一个相当笨拙的解决方案,我宁愿在 HTML 端进行查找。这可能吗?
这是一种可以在整个模板中使用的方法:
Template.registerHelper('username',function(userId){
var user = Meteor.users.findOne(userId);
return user && user.username;
});
然后在任何模板中,您只需执行 {{username message.from}}
(例如),用户名将自动插入。
我正在 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>
使用以下模板助手:
Chats = new Mongo.Collection("chats");
Users = new Mongo.Collection("users");
import './main.html';
Template.hello.helpers({
messages:function(){
return Chats.find();
}
})
这将创建以下输出:
Test
From oSiKCdvCHGrfnfQoT to ESXbJXeWmNanz7zKq: Hello
但是,在 HTML 页面中,我想查找用户的用户名,而不是显示他们的原始 ID。我知道我可以将用户名存储在 Chats 集合中,但我宁愿保持它干净。当然,我也可以在模板辅助函数中进行查找,并创建一个新的数据结构,它模仿消息,但将 ID 替换为用户名。然而,这是一个相当笨拙的解决方案,我宁愿在 HTML 端进行查找。这可能吗?
这是一种可以在整个模板中使用的方法:
Template.registerHelper('username',function(userId){
var user = Meteor.users.findOne(userId);
return user && user.username;
});
然后在任何模板中,您只需执行 {{username message.from}}
(例如),用户名将自动插入。