mongoose的人口对象正在消失?

我简化了下面的代码:

var buySchema = new mongoose.Schema({ userid:String, timestamp:Number, price:Number }); var cardSchema = new mongoose.Schema({ cardid: String, buy:[{type:mongoose.Schema.Types.ObjectId, ref:'buy'}], }); var Card = mongoose.model('cards',cardSchema,'cards'); var Buy = mongoose.model('buy',buySchema,'buy'); Card.findOne({'cardid':cardid}, function(err, card) { var newBuy = new Buy({'userid':userid, timestamp:null,price:null}); newBuy.save(function(err){ card.buy.addToSet(newBuy._id); }); card.save(function(err,card){ console.log(card.buy); // card.buy[] has an ObjectId ref }); }); Card.findOne({'cardid':cardid}, function(err, card) { console.log(card.buy); // !!!!! card.buy[] does not have ObjectId ref !!!!! }); 

buy []似乎没有在mongodb中保存的ObjectId参考

如果以后没有ObjectId参考,我该如何填充卡? 他们去了哪里? 我没有得到什么人口?

newBuy.save调用是asynchronous的,所以你的card.save调用发生在你的card.buy.addToSet调用之前。

因此,将您的部分代码重新sorting为:

 newBuy.save(function(err){ card.buy.addToSet(newBuy._id); card.save(function(err,card){ console.log(card.buy); }); }); 

要么

 newBuy.save(function(err){ }); card.buy.addToSet(newBuy._id); card.save(function(err,card){ console.log(card.buy); }); 

你必须添加引用ref:'buy'并添加corectly模式。 看mongoosejs 文档 。

 var cardSchema = new mongoose.Schema({ cardid: String, buy:[{type:mongoose.Schema.Types.ObjectId, ref:'buy'}], }); var Card = mongoose.model('cards',cardSchema); var Buy = mongoose.model('buy',buySchema); 

所以当保存孩子的时候,你必须把父母保存在孩子保存的callback中,像这样:

 newBuy.save(function(err){ card.buy.addToSet(newBuy._id); card.save(function(err,card){ console.log(card.buy); // card.buy[] has an ObjectId ref & is actually saved to db }); });