使用MongoDB,NodeJs和Meteor,我有2个这样的集合设置:
类别: * 餐饮 * 生活方式 *其他
产品:
1. CategoryId: 1 (food)
* Pizza
2. CategoryId: 1 (food)
* Spaghetti
3. CategoryId: 2 (lifestyle)
* Ziplining
4. CategoryId: 2 (lifestyle)
* Fishing
最终,我正在尝试在模板中生成如下所示的结果:
Food:
* Pizza
* Spaghetti
Lifestyle:
* Ziplining
* Fishing
Other:
我认为最好的方法是做一个拉入类别的查询,拉出类别ID,然后用类别ID进行第二次查询,循环结果并将它们拼接在一起到我可以使用模板解析的单个多维json对象。 现在是棘手的部分...我无法找到有关如何执行此操作的文档,因为主要是mongo是为非规范化数据设计的。
答案 0 :(得分:0)
实际上这很简单:
let categoryId = Categories.findOne({<Your query here>});
let resultCursor = Items.find({CategoryId:categoryId});
第一行中的查询取决于您的文档结构。
答案 1 :(得分:0)
我们假设您的Items
看起来像{ _id, categoryId, name }
而您的Categories
看起来像{ _id, name }
然后,您只是尝试在两个集合中显示层次结构。
Blaze(html):
<template name="hierarchy">
<ul>
{{#each categories}}
<li>{{name}}</li>
<ul>
{{# each items _id }} <!-- here _id is the _id of a category -->
<li>{{name}}</li>
{{/each}}
</ul>
{{/each}}
</ul>
</template>
助手(js):
Template.hierarchy.helpers({
categories: function() {
return Categories.find({},{sort: {name: 1}})
},
items: function(_id){
return Items.find({categoryId: _id},{sort: {name: 1}})
}
});