使用_id引用数组对多个相应文档进行高效查询
Efficient queries for multiple corresponding documents using an array of _id references
我正在尝试摸索流星。这是我的一个模板中的帮助程序:
genres: function() {
return Genres.find();
}
它返回如下内容:
[{ "name" : "Action", "_id" : "CHP8uaSPNwKTj6gn7" },
{ "name" : "Thriller", "_id" : "8hKRp3LmgcD6gPRXf" }]
我在同一模板中还有另一个辅助函数:
authors: function() {
return Authors.find();
}
它返回如下内容:
[{ "name" : "Robert Ludlum", "genre" : [ "CHP8uaSPNwKTj6gn7", "8hKRp3LmgcD6gPRXf" ]}]
当我想在 HTML 中显示作者及其流派时,问题变得很明显:
{{#each authors}}
<p> Author: {{name}} </p>
<p> Genres: {{genre}} </p>
{{/each}}
正如您已经猜到的那样,这会导致:
Author: Robert Ludlum
Genres: CHP8uaSPNwKTj6gn7, 8hKRp3LmgcD6gPRXf
这是不可取的。这样会好得多:
Author: Robert Ludlum
Genres: Action, Thriller
我很难弄清楚如何实现这一目标。我对NoSQL的东西没有太多经验,我看到的例子在这种情况下没有帮助。
那么我该如何做到这一点呢?
有几种方法可以解决这个问题。一种是添加一个帮助程序,例如:
Template.myTemplate.helpers({
genreNames: function() {
var genres = Genres.find({_id: {$in: this.genre}}).fetch();
var names = _.pluck(genres, 'name');
return names.join(', ');
}
});
并将模板修改为如下所示:
{{#each authors}}
<p> Author: {{name}} </p>
<p> Genres: {{genreNames}} </p>
{{/each}}
帮助程序之所以有效,是因为它运行在#each
内部,因此它的上下文是作者。
或者,可以将转换添加到集合或使用集合帮助程序。这样,您就可以向所有创作实例添加虚拟属性,以便执行以下操作:Authors.findOne().genreNames()
.
在大气中有一个叫做 publish-composite
,https://atmospherejs.com/reywood/publish-composite 应该可以让您做您所追求的事情。
它将允许您使用主集合和其他集合中的相关数据选择多个集合。
相关文章:
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- Mongoose查询嵌套文档的时间或多或少为某个日期
- 对couchdb数据库/视图中的所有文档运行脚本/查询
- javascript对象与阅读文档——初学者查询效率
- 查询以匹配数组的第n个文档
- 按时钟范围查询mongo文档-正向和反向
- 猫鼬一个查询所有子文档
- 离线 HTML 文档的 Javascript 可查询索引
- 为任何更新查询增加 Mongoose 文档版本的简单方法
- 使用_id引用数组对多个相应文档进行高效查询
- 蒙戈数据库.查询子文档中的数组
- j查询禁用文档功能
- j查询文档加载时,每 3 秒检查一次并重新加载
- 如何在mongodb中查询id存储在$in的“var-ids”数组中的文档
- 使用MongoDB查询JSON中的嵌套文档
- Meteor-dons'中的查询子文档;不起作用
- mongoose/mongodb查询从javascript数组中的每个发送方获取最后一个文档
- 如何将Mongoose排序查询偏移到特定文档之后启动
- j用数学查询文档宽度
- 传递嵌套文档查询字段