我想用MEAN stack创建一个小型的足球世界杯预测游戏,但我有一个问题,我需要得到所有预测的用户游戏和所有尚未预测的游戏。
我的模式是(用户模式是默认的mean-stack):
/**
* Prediction Schema
*/
var PredictionSchema = new Schema({
game_id: {
type: Schema.ObjectId,
ref: 'Game'
},
user: {
type: Schema.ObjectId,
ref: 'User'
},
date: {
type: Date,
default: Date.now
},
choice: {
type: Number
}
});
And game schema:
var GameSchema = new Schema({
team1_key: {
type: String
},
team1_title: {
type: String
},
team2_key: {
type: String
},
team2_title: {
type: String
},
play_at: {
type: Date
},
score1: {
type: Number
},
score2: {
type: Number
}
});
mongoose.model('Game', GameSchema);
无论如何,我想要实现的是获得所有预测中提到的所有游戏和活跃用户。
我试过这样做,但它不工作:
/**
* List of Games predicted
*/
exports.allPredicted = function(req, res) {
Game.find({_id: {$in: Prediction.distinct('game_id')}}).sort('-created').populate('user', 'name username').exec(function(err, games) {
if (err) {
res.render('error', {
status: 500
});
} else {
res.jsonp(games);
}
});
};
怎么了?I got error:
Error: Failed to lookup view "error" in views directory "/Users/username/Projects/ProjectName/server/views"
任何想法?谢谢!:)
编辑:得到不同的值,不确定这是否是创造的方式,但无论如何工作…几乎:
exports.allPredicted = function(req, res) {
Prediction.distinct('game_id').populate('user', 'name username').exec(function(err, predictions) {
if (err) {
res.render('error', {
status: 500
});
} else {
console.log(predictions);
Game.find({_id: {$in: predictions }}).sort('-created').populate('user', 'name username').exec(function(err, games) {
if (err) {
res.render('error', {
status: 500
});
} else {
res.jsonp(games);
}
});
}
});
};
现在我需要,它也应该考虑活动用户。任何帮助吗?
您可以在req.user
so try
Prediction.find({user : req.user._id}).sort('-created').populate('game_id').exec(function(err, predictions) {
if (err) {
res.render('error', {
status: 500
});
} else {
res.jsonp(predictions);
}
});
这将返回用户所做的所有预测,并将game_id替换为相关的游戏。
ps:我没有测试它,但我认为这是你正在寻找的请求逻辑。
ps2:如果您也想填充您的用户数据,请参阅http://mongoosejs.com/docs/populate.html