根据来自另一个集合的值对一个集合中的项目进行排序

时间:2015-09-03 17:35:59

标签: mongodb sorting join meteor composite

我们正在与Meteor建立一个网站。我有两个MongoDB集合。一个有技能的人:

[{ _id : id1 , name : "computing" } , { _id : id2 , name : "filming" } , ...]

和一个人:

[{ _id : id3 , name : "David" , knows : [...] } , { _id : id4 , name : "Laura" , knows : [...] } , ...]

'knows'是包含介于0和1之间的值的对象列表,用于描述用户对给定技能的了解程度:

大卫的'知道':[{ id : id1 , state : 0.81 } , { id : id2 , state : 0.32 }, ...]

我想向用户展示按州分类的技能。请记住,每个技能不一定列在每个用户的“已知”中,只有那些他们已经尝试学习的技能。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

这是一个让你入门的例子:

<强> HTML

<template name="myTemplate">
  {{#each people}}
    <div class="person">
      <div class="person-name">{{name}}></div>
      {{#each skills}}
        <div class="person-skill">{{name}}:{{state}}</div>
      {{/each}}
    </div>
</template>

<强> JS

Template.myTemplate.helpers({
  people: function() {
    // Maybe Meteor.users.find()?
    return People.find();
  },
  skills: function() {
    // here the context is a person
    return _.chain(this.knows)
      .sortBy('state')  // sort the skills in ascending order
      .map(function(skill) {
        var id = skill.id;
        // join to the skills collection through `id`
        var name = Skills.findOne(id).name;
        return {name: name, state: skill.state};
      });
  }
});