如何在流星助手/模板中按日期排序和显示mongo条目

时间:2016-10-05 15:43:12

标签: mongodb meteor meteor-blaze

你好,对不起我的英语。

我在Paint中画了一张照片,这样你就能更好地理解我的问题/意图: Sketch in Paint

我想在我的网站上构建这个html结构,如图所示。

我的mongodb结构:

{ "_id" : "doZfpnSFPzuPCi69W", "title" : "TodoA", "date" : "2016-10-03" }  
{ "_id" : "kLdCQotDBPmB3FGzY", "title" : "TodoB", "date" : "2016-10-03" }
{ "_id" : "fgAoaq53oNdKQSHXv", "title" : "TodoA", "date" : "2016-10-04" }
{ "_id" : "L6v4FC5PpyHjCkkpd", "title" : "TodoB", "date" : "2016-10-04" }

我知道如何使用"每个":

显示模板中的所有条目
<template name="myTemplate">
  {{#each showTodos}}
  ...
 {{/each}}
</template>

但是,我不知道如何实现我的目的,你可以在我的照片上看到。我知道如何在meteor中使用if-else,但我不知道如何用if语句实现这个html结构。你能帮我解决代码和逻辑吗?

1 个答案:

答案 0 :(得分:1)

你只需要嵌套两个{{#each}}循环,一个用于日期,每个日期,所有匹配的文档。

但首先你需要找到独特的日期!要执行此操作,请使用下划线的_.uniq()功能。

HTML:

<template name="myTemplate">
  {{#each uniqueDates}}
    this
    {{#each todos}}
      ...
    {{/each}}
</template>

JS:

Template.myTemplate.helpers({
  uniqueDates(){
    const dates = myCollection.find({},{sort: {date: 1}})
      .map((doc)=>{return doc.date});
    return _.uniq(dates,true);
  },
  todos(){
    return myCollection.find({date: this});
  }
};

.map()应用于游标允许您仅将日期提取为数组。然后在数组上使用_.uniq()来获取唯一值。 <{1}}的第二个参数告诉它值已经排序。