【问题标题】:Mongoose Population ObjectId ref's are disappearing?Mongoose Population ObjectId ref 正在消失?
【发布时间】:2014-05-29 08:53:28
【问题描述】:

我已经简化了下面的代码:

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[] 似乎也没有将 ObjectId ref 保存在 mongodb 中

如果没有 ObjectId 引用,我以后应该如何填充卡片?他们去哪儿了?关于人口,我没有得到什么?

【问题讨论】:

    标签: node.js mongoose population


    【解决方案1】:

    您必须为 ref:'buy' 添加引号并添加正确的架构。看猫鼬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);
    

    【讨论】:

    • 感谢您指出这一点。您是对的,但是问题仍然存在,并且行为完全相同。我已更新我的代码以反映建议的更改。
    【解决方案2】:

    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);
      });
    });
    

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

    【讨论】:

    • 谢谢!只是同时想出了这个:)
    【解决方案3】:

    所以当保存孩子时,你必须像这样在孩子的保存回调中保存父级:

    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
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 2021-03-14
      • 2020-12-31
      • 2013-03-24
      • 2020-04-18
      • 2012-08-20
      相关资源
      最近更新 更多