用于获取类别和数据的子查询

时间:2016-05-01 05:02:42

标签: node.js mongodb meteor mongodb-query

使用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是为非规范化数据设计的。

2 个答案:

答案 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}})
  }
});