我已经简化了以下代码:
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 !!!!!
});
买[]似乎没有在mongodb中保存ObjectId引用
如果没有ObjectId引用,我怎么能在以后填充卡?他们去哪儿了?我对人口的看法是什么?
答案 0 :(得分:1)
你必须为ref添加引号:' buy'并添加corectly架构。看看mongoosejs docs。
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);
答案 1 :(得分:0)
newBuy.save
来电是异步的,因此您card.save
来电之前正在进行card.buy.addToSet
来电。
因此,请将您的代码部分重新排序为:
newBuy.save(function(err){
card.buy.addToSet(newBuy._id);
card.save(function(err,card){
console.log(card.buy);
});
});
OR
newBuy.save(function(err){
});
card.buy.addToSet(newBuy._id);
card.save(function(err,card){
console.log(card.buy);
});
答案 2 :(得分:0)
因此,在保存孩子时,你必须将父母保存在孩子保存的回调中,如下所示:
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
});
});