过滤流星FindOne的回归?

时间:2016-01-14 22:20:48

标签: javascript meteor

如何在Iron Router中过滤FindOne函数的返回?我认为聚合是不可能的,但我可能错了。我尝试了许多不同的方法。我想返回它找到匹配的season_number的id,name和season对象。

我的数据库设置如下:

  • _id
  • 名称
  • 四季(数组)

    • 赛季(对象)

      • season_number

      • 剧集(数组)

        • 剧集(对象)

          • EPISODE_TITLE
          • EPISODE_NUMBER

这是我的铁路由器代码,目前正在运行findOne函数。

Router.route('/show/:_id/season/:season_number', {
  name: 'viewSeasonPage', // This links to the template
  data: function() { return Tv.findOne({_id:"KQBXq4nri7zssDna2", "seasons.season_number": 2}))}
});   

2 个答案:

答案 0 :(得分:0)

    Router.route('/show/:_id/season/:season_number', {
      name: 'viewSeasonPage', // This links to the template
      data: function() { 
               let tv = Tv.findOne({_id:"KQBXq4nri7zssDna2", "seasons.season_number": 2});
               if (tv && tv.seasons) { return tv.seasons.find(function(season) { return season.season_number == 2; })
            }
    }); 

答案 1 :(得分:0)

您需要过滤结果以创建要返回的数据对象以及所需的信息。如果您的搜索没有找到任何内容,那么您的数据就是一个空对象。

Router.route('/show/:_id/season/:season_number', {
    name: 'viewSeasonPage',
    data: function() {
        // Find your object
        var tv = Tv.findOne({
            _id: this.params._id,
            seasons: {
                $elemMatch: {
                    season_number: this.params.season_number
                }
            }
        });
        // Fill data by filtering the correct season
        var data = {};
        if (tv) {
            data._id = tv._id;   // 1. ID
            data.name = tv.name; // 2. NAME
            // Find correct season in array
            var season;
            for (var i = tv.seasons.length - 1; i >= 0; i--) {
                season = tv.seasons[i];
                if (season.season_number == this.params.season_number) {
                    data.season = season; // 3. SEASON
                }
            };
        }
        return data;
    }
});

我知道它有很多编码,但这是为了理解这个想法和过程。