我已经创建了一个db结构,如下所示。在这个结构中我想检索从currentDate匹配的联赛 - 7天和前进。我的问题是,对于我的数据库的当前结构是否可行,或者我需要在可能之前进行更改?
联盟架构
var leagueSchema = new Schema({
name: String,
league: Number
});
匹配架构
var matchSchema = new Schema({
matchId: Number,
leagueId: Number,
date: Date,
homeName: String,
awayName: String,
});
答案 0 :(得分:0)
您的设计可以使用一些更改来创建对其他集合中的文档的引用,以使 population 生效。填充是使用来自其他集合的文档自动替换文档中的指定路径的过程
在 matchSchema
中,league
字段设置为数字_id
,其中ref选项告诉Mongoose在填充期间使用哪个模型, case League
模型。以下示例演示了架构更改:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var leagueSchema = new Schema({
_id: Number,
name: String,
league: Number
});
var matchSchema = new Schema({
_id: Number,
league: { type: Number, ref: 'League' },
date: Date,
homeName: String,
awayName: String
});
var League = mongoose.model('League', leagueSchema);
var Match = mongoose.model('Match', matchSchema);
保存文档时,只需在refs上指定_id
值,如下例所示:
var premierLeague = new League({ _id: 0, name: 'Premiership', league: 100 });
premierLeague.save(function (err) {
if (err) return handleError(err);
var matchDay = new Date(2015, 10, 7);
var match = new Match({
_id: 1,
date: matchDay,
league: premierLeague._id, // assign the _id from the league
homeName: "Manchester United",
awayName: "West Brom"
});
match.save(function (err) {
if (err) return handleError(err);
// thats it!
});
});
现在您的查询将检索具有来自currentDate的比赛的联赛 - 7天及以后,您使用查询构建器填充您的比赛联赛:
var oneWeekAgo = new Date();
oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);
Match
.find({ "date": { "$gte": oneWeekAgo } })
.populate('league')
.exec(function (err, matches) {
if (err) return handleError(err);
console.log(matches);
});