首先,我是几年来使用Django和关系数据库的,但是我想尝试一些新的东西--所以这可能是我的一个概念性问题。我只是不知道它在哪。希望这个问题足够清楚,尽管我不确定我该问什么.
所以。我正在设置一个包含团队的应用程序,以及这些团队之间的匹配。
以下是我的模特:
var TeamSchema = new Schema({
name: String,
code: String
});
TeamSchema.statics = {
list: function(options, cb) {
var criteria = options.criteria || {};
this.find(criteria)
.exec(cb);
},
load: function(id, cb) {
this.findOne({_id: id})
.exec(cb);
},
};
var MatchSchema = new Schema({
home_team: { type: Schema.ObjectId, ref: 'Team' },
away_team: { type: Schema.ObjectId, ref: 'Team' },
datetime: Date,
slug: String,
home_score: Number,
away_score: Number
});当我想以编程方式填充这些模型时,就会遇到问题。球队很容易做到:
// Clear old teams, then add default teams
Team.find({}).remove(function() {
Team.create({
name: 'Brazil',
code: 'bra'
}, {
name: 'Cameroon',
code: 'cmr'
}, {
name: 'Spain',
code: 'esp'
}, {
....但是我想要创建匹配,这需要获得团队的_ids。按照我的想法,这非常容易:创建团队,然后在创建匹配之前,获取适当的团队并分配给变量,最后使用这些变量创建匹配以填充home_team和away_team字段。
当然,这在这里不起作用,因为不能保证在调用Match creating函数时已经填充了团队。所以我将代码移到团队创建代码的回调中。但是,这仍然不起作用,因为当创建匹配时,团队变量仍未填充。我把匹配创建代码作为对团队查找的回调(这本身就是对团队创建代码的回调)来实现这一点。但是,这只适用于其中一个团队,在创建匹配之前,如何确保两个_ids都可用?
正如我在一开始所说的那样,我觉得我想错了--所以我不一定在寻找工作代码,更多的是关于我的想法哪里出错的提示。
尽管如此,这是我为其中一个团队设置的工作代码:
// Clear old teams, then add default teams
Team.find({}).remove(function() {
Team.create({
name: 'Brazil',
code: 'bra'
}, {
name: 'Croatia',
code: 'hrv'
},
function() {
console.log('finished populating teams');
// Clear old matches, then add default matches
Match.find({}).remove(function() {
Team.findOne({code: 'bra'}, function(err, obj) {
if (!err) {
console.log(obj.code);
Match.create({
datetime: "2014-06-01T22:00:00.000Z",
slug: 'bra-hrv',
home_team: obj._id
});
} else {
console.log(err);
}
});
});
});
});编辑:找到一个绕过它的方法。由于code对每个团队都是唯一的,所以我将team _id字段切换为String并删除了code。这样,我就可以轻松地创建Match对象,而无需查找_id --我已经知道它是什么了。
并不能真正解决我的根本问题,但它确实能完成工作。
发布于 2014-05-13 12:49:56
如果使用new和save创建Team文档,则可以立即访问它们的_id值,因为它们被分配给客户端:
var brazil = new Team({
name: 'Brazil',
code: 'bra'
});
brazil.save();
var croatia = new Team({
name: 'Croatia',
code: 'hrv'
});
croatia.save();
Match.create({
datetime: "2014-06-01T22:00:00.000Z",
slug: 'bra-hrv',
home_team: brazil._id,
away_team: croatia._id
});https://stackoverflow.com/questions/23624944
复制相似问题