我已经购买了发现流星书并通过了本教程。我仍然不确定几个部分,并遇到了一个我无法工作的问题。如何从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();
});
在客户订阅使用铁路由器:
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}}块通过在应用程序集合中的文件进行迭代
{{#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领域,我想匹配在计算机集合中记录文件,然后返回计算机的名称而不是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;
}
});
我显然失去了一些东西,但我似乎无法环绕它是什么我的头。
如果可能,我会更喜欢一个答案,会教我什么,我做错了,而不是一个副本&粘贴解决方案如何解决它。我似乎有一个理解这个问题,并会感谢任何意见什么编程理论,我应该审查。
感谢您的阅读! Piotr
谢谢你的回答。我宁愿让它与单独的集合一起工作,因为我在应用程序的其他部分也遇到同样的问题,例如将计算机分配给用户,将附件(例如pdf)分配给应用程序,用户或计算机。我也明白,这不是像Mongo这样的数据存储的理想方式,但我决定学习Meteor而不是使用Rails + SQL路线。为了缩短这篇文章,我还削减了很多代码。 Console.log(compName)返回一个对象。然后,我也尝试使用{{computerName.name}},但也没有工作。 –
好的,既然它是一个对象,你必须通过循环来获得你需要的值,但是因为它总是只有1个结果,所以你可以使用findOne作为他在答案中提到的Tomas,只返回1个结果作为数组并返回。 – kiewietr