我是noSQL的新手,我想弄清楚如何创建最好的模型结构。我需要做的是每小时从api检索联赛和比赛并将其添加到我的数据库。每小时得分可能会改变,并且可能会在每个联赛中添加新的比赛,因此这应该可以在模型中使用。我已经阅读了文档并创建了以下内容,但是我不确定是否可以更新每个文档并为联盟添加新的匹配项。什么是理想的建模?
锦标赛模型
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var League = require('./league');
var TournamentSchema = new Schema({
slug: String,
tournaments: [League]
});
module.exports = mongoose.model('Tournament', TournamentSchema);
联赛
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Match = require('./match');
var leagueSchema = new Schema({
leaguetId: Number,
name: String,
matches: [Match]
});
module.exports = mongoose.model('League', leagueSchema);
匹配
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var matchSchema = new Schema({
homeTeam: String,
awayTeam: String,
homeScore: Number,
awayScore: Number,
start: Date
});
module.exports = mongoose.model('Match', matchSchema);
到目前为止发布请求
router.post('/tournaments', function(req, res, next) {
var tournament = new Tournament(); // create a new instance of the Bear model
tournament.name = req.body.slug; // set the bears name (comes from the request)
// save the bear and check for errors
tournament.save(function(err) {
if (err)
res.send(err);
res.json({ message: 'Tournament created!' });
});
});
答案 0 :(得分:1)
如果您要为联赛添加新的比赛并按时间间隔更新比赛,为什么要将它们嵌套在一起?假设你有一个匹配id为5的分数改变了。为了找到它来更新它你必须首先通过每个联赛,然后遍历每个联赛中的每场比赛,直到你找到与id为5的比赛。除非我错了并且有一些更简单的方法来做到这一点,这似乎效率很低。
为什么没有两个系列?联赛收藏和比赛集合。将有一个(联赛):许多(匹配)关系。当你需要更新比赛的分数时,谁会关心它的联赛?在匹配集合中搜索id 5,并进行更新。
新比赛会是什么样的?让我们说一个身份7的联赛有一场新的比赛。将匹配添加到联盟ID为7的匹配集合中。
如果你真的反对离开一个集合..至少将你的匹配存储在一个对象而不是一个数组中,那么你可以通过使用它的匹配名来找到具有O(1)查找时间的匹配。而不是像你现在拥有的O(n)或O(n ^ 2)查询时间。