如何在Iron Router中过滤FindOne函数的返回?我认为聚合是不可能的,但我可能错了。我尝试了许多不同的方法。我想返回它找到匹配的season_number的id,name和season对象。
我的数据库设置如下:
四季(数组)
赛季(对象)
season_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}))}
});
答案 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;
}
});
我知道它有很多编码,但这是为了理解这个想法和过程。