我已经购买了 Discover Meteor 这本书并完成了教程。我仍然不确定几个部分,遇到了一个我无法工作的问题。
我有两个收藏。
Computers = new Mongo.Collection('computers');
Apps = new Mongo.Collection("apps");
在我发布的服务器上:
Meteor.publish('computers', function() {
return Computers.find();
});
Meteor.publish('apps', function() {
return Apps.find();
});
在使用 Iron Router 订阅的客户端上:
Router.configure({
waitOn: function() {
return [Meteor.subscribe('computers'),
Meteor.subscribe('apps'),
Meteor.subscribe('users')];
}
});
在一个集合中,我使用另一个集合中另一个文档的 ID 引用了一个文档。
Computers.insert({
_id: sd9f9sdf699,
name: 'Mac1'
});
Apps.insert({
_id: ewf4y34349f,
name: 'App One',
version: '1.0',
computerId: sd9f9sdf699
});
然后我使用 {{#each}} block 来遍历应用程序集合中的文档
{{#each apps}}
{{> appItem}}
{{/each}
<template name="appItem">
<tr>
<td><input type="checkbox" name="checked" class="ui checkbox"></td>
<td>{{name}}</td>
<td>{{version}}</td>
<td>{{computerName}}</td>
</tr>
</template>
当我到达 computerId 字段时,我想匹配 computers 集合中的文档,然后返回计算机的名称而不是 id。
这是我的 app_item.js 代码:
Template.appItem.helpers({
computerName: function() {
var id = this.computerId;
var compName = Computers.find({_id: id}, {fields: {name: 1} }).fetch();
return compName;
}
});
我显然在这里遗漏了一些东西,但我似乎无法理解它是什么。
如果可能的话,我会更喜欢一个能告诉我我做错了什么的答案,而不是一个关于如何修复它的复制和粘贴解决方案。我似乎无法理解这一点,如果有任何建议我应该复习哪些编程理论,我将不胜感激。
感谢阅读! 彼得
最佳答案
您的帮助程序代码应该使用 findOne() 而不是 find() 函数。 find() 返回具有返回数组的函数 fetch() 的 coursor。 findOne() 返回一个文档。
Template.appItem.helpers({
computerName: function() {
var comp = Computers.findOne(this.computerId, {fields: {name: 1} });
return comp.name;
}
});
这是一种在 Meteor 中处理连接的方法。我找到了更好的方法:http://meteor.hromnik.com/blog/joins-in-meteorjs-and-mongodb
关于mongodb - 我如何从 Meteor 中不同集合中的特定字段返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29646286/