我有以下模型:
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未保存。我怎样才能做到这一点?
答案 0 :(得分:2)
您需要手动执行此操作。首先保存玩家并获取他们的对象ID。推入引用的父播放器数组。 下一步是保存父。
答案 1 :(得分:2)
players
是一个ObjectIds数组,因此您需要传入_id
p1
和p2
而不是整个对象。 _id
期间会填充新模型的new
字段,因此可以立即使用,但您仍然需要在所有三个字段上调用save
。
var p1 = new Player({name: 'abc'});
var p2 = new Player({name: 'def'});
var agame = new Game({players: [p1._id, p2._id]});
p1.save();
p2.save();
agame.save();
答案 2 :(得分:0)
在我的情况下,我也必须手动执行此操作。因为它是一个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
})