Node.js 猫鼬获得即将到来的比赛的联赛

Node.js 猫鼬获得即将到来的比赛的联赛,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我已经创建了一个db结构,如下所示。在这个结构中,我想检索从当前日期到7天及以后有比赛的联赛。我的问题是,在我的数据库的当前结构下,这是可能的,还是我需要在可能之前更改它 联盟模式 var leagueSchema = new Schema({ name: String, league: Number }); var matchSchema = new Schema({ matchId: Number, leagueId: Number, da

我已经创建了一个db结构,如下所示。在这个结构中,我想检索从当前日期到7天及以后有比赛的联赛。我的问题是,在我的数据库的当前结构下,这是可能的,还是我需要在可能之前更改它

联盟模式

var leagueSchema   = new Schema({
    name: String,
    league: Number

});
var matchSchema   = new Schema({
    matchId: Number,
    leagueId: Number,
    date: Date,
    homeName: String,
    awayName: String,

});
匹配模式

var leagueSchema   = new Schema({
    name: String,
    league: Number

});
var matchSchema   = new Schema({
    matchId: Number,
    leagueId: Number,
    date: Date,
    homeName: String,
    awayName: String,

});

您的设计可能会使用一些更改来创建对其他集合中文档的引用,以使有效。填充是将文档中的指定路径自动替换为其他集合中的文档的过程 在您的
matchSchema
中,
league
字段被设置为一个数字
\u id
,其中ref选项告诉Mongoose在填充期间使用哪个模型,在本例中为
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);
保存文档时,只需在参考上指定
\u 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);     
    });

您的设计可能会使用一些更改来创建对其他集合中文档的引用,以使有效。填充是将文档中的指定路径自动替换为其他集合中的文档的过程 在您的
matchSchema
中,
league
字段被设置为一个数字
\u id
,其中ref选项告诉Mongoose在填充期间使用哪个模型,在本例中为
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);
保存文档时,只需在参考上指定
\u 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);     
    });

这将返回带有联赛Id的所有比赛,但是我希望检索带有即将到来的比赛的所有联赛。这将返回带有联赛Id的所有比赛,但是我希望检索带有即将到来的比赛的所有联赛。