Mongoose 创建上级单据时,如何自动创建被引用的下级单据?
我有如下模型:Mongoose 创建上级单据时,如何自动创建被引用的下级单据?,mongoose,Mongoose,我有如下模型: var GameSchema = new Schema({ players: [{type: Schema.Types.ObjectId, ref: 'Player'}], }); var PlayerSchema = new Schema({ name: { type: String, required: true } }); mongoose.model('Player', PlayerSchema); mongo
var GameSchema = new Schema({
players: [{type: Schema.Types.ObjectId, ref: 'Player'}],
});
var PlayerSchema = new Schema({
name: {
type: String,
required: true
}
});
mongoose.model('Player', PlayerSchema);
mongoose.model('Game', GameSchema);
这是我的密码:
var p1 = new Player({name: 'abc'});
var p2 = new Player({name: 'def'});
var agame = new Game({players:[p1,p2]});
agame.save();
我想做的是,当在db中创建新游戏时,也应该创建p1、p2播放器。我的代码不工作,p1、p2未保存。我如何才能做到这一点?这需要手动完成。首先保存玩家并获取他们的对象ID。推入引用的父玩家数组。
下一步是保存父项。这需要手动完成。首先保存玩家并获取他们的对象ID。推入引用的父玩家数组。
下一步是保存父对象。
players
是一个objectid数组,因此需要传入p1
和p2
的\u id
,而不是整个对象。新型号的\u id
字段在new
期间填充,因此它立即可用,但您仍然需要在所有三个字段上调用save
var p1=新玩家({name:'abc'});
var p2=新玩家({name:'def'});
var agame=新游戏({玩家:[p1.\U id,p2.\U id]});
p1.save();
p2.save();
agame.save();
玩家
是一个objectid数组,因此需要传入p1
和p2
的\u id
,而不是整个对象。新型号的\u id
字段在new
期间填充,因此它立即可用,但您仍然需要在所有三个字段上调用save
var p1=新玩家({name:'abc'});
var p2=新玩家({name:'def'});
var agame=新游戏({玩家:[p1.\U id,p2.\U id]});
p1.save();
p2.save();
agame.save();
在我的情况下,我也必须手动执行此操作。因为它是一个web应用程序,所以在我的父控制器中,它得到了类似
.post((req, res) => {
let parent = req.body;
if(parent && parent.childrenArray){
let ids = [];
parent.childrenArray.forEach((children)=>{
let c = new Children(children);
c.save();
ids.push(c._id);
})
parent.childrenArray = ids;
req.body = parent;
}
// create parent
})
在我的情况下,我也必须手动执行此操作。因为它是一个web应用程序,所以在我的父控制器中,它得到了类似
.post((req, res) => {
let parent = req.body;
if(parent && parent.childrenArray){
let ids = [];
parent.childrenArray.forEach((children)=>{
let c = new Children(children);
c.save();
ids.push(c._id);
})
parent.childrenArray = ids;
req.body = parent;
}
// create parent
})