1

以下のコードを簡略化しました。

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 refs がない場合、後でカードに入力するにはどうすればよいですか? 彼らはどこに行きましたか?人口について何が得られないのですか?

4

3 に答える 3

1

ref:'buy' の引用符を追加し、正しくスキーマを追加する必要があります。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);
于 2014-05-29T09:10:06.470 に答える
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);
  });
});

また

newBuy.save(function(err){
});

card.buy.addToSet(newBuy._id);
card.save(function(err,card){
  console.log(card.buy);
});
于 2014-05-29T18:04:21.057 に答える
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
  });
});
于 2014-05-29T18:04:35.483 に答える