过滤器返回流星发现一号

Filter Return of Meteor FindOne?

本文关键字:一号 返回 流星 发现 过滤器      更新时间:2023-09-26

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

我的数据库设置如下:

  • _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}))}
});   

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

您需要筛选结果以创建要返回的数据对象,其中包含所需的信息。如果搜索未找到任何内容,则数据为空对象。

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

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