[英]Filter Return of Meteor FindOne?
我将如何过滤Iron Router中FindOne函数的返回? 我认为聚合是不可能的,但是我可能是错的。 我尝试了许多无效的方法。 我想返回ID,名称和它在其中找到匹配的season_number的季节对象。
我的数据库设置如下:
季节(数组)
季节(对象)
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}))} });
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;
}
});
我知道要编写很多代码,但这是为了了解想法和过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.