Mongoose fail to set ref -Schema.Types.ObjectId- to other document

I'm trying to save a document with mongoose according to the doc http://mongoosejs.com/docs/populate.html First I call parent.save and inside the callback of parent.save I use child.save. But when I check parent.childs I can see that no child has been added. The parent schema is Home :

var HomeSchema  = new Schema({


    password : String,
    draft :   { type: Boolean, default: true },
    edited :   { type: Boolean, default: false },
    guests : [{type : Schema.Types.ObjectId, ref : 'Guest'}],

    _event : {type : Schema.Types.ObjectId, ref : 'Event'}

});

the child schema is Guest :

var GuestSchema = new Schema({

    _home : {type : Schema.Types.ObjectId, ref : 'Home'},
    firstname : String,
    lastname : String,
    coming : { type: String, default: 'dnk-coming' },
    phone : String,
    email : String,
    address : String,
    edited :   { type: Boolean, default: false },
    draft :  { type: Boolean, default: true }

});

To avoid any misunderstanding, you have to know that this two Schema are included in my user schema :

var userSchema = mongoose.Schema({
    homes:[homeSchema.HomeSchema],
    events:[eventSchema.EventSchema],
    guests:[eventSchema.guestSchema],

});

Now you should have all the required informations to completly understand the execution :

  UserModel.findById(user._id, function(err, userFound) {
    if (!err) {
      /* cleaning draft*/
      userFound.homes = that.clean(userFound.homes);
      /* setting draft */
      var HomeModel = mongoose.model("Home");
      var homeModel = new HomeModel();
      homeModel.draft = true;


      if (userFound.homes === null) {
        userFound.homes = [];
      }

      homeModel.save(function(err) {
        if (!err) {
          var GuestModel = mongoose.model("Guest");
          var guestModel = new GuestModel();
          guestModel._home = homeModel._id;

          guestModel.save(function(err) {
            if (!err) {
                // @ma08 : According to the doc this line should'nt be required
                //homeModel.guests.push(guestModel._id);  so when I use this obviously the id is correctly set but when I try a populate after saving the populate do not work 
              userFound.homes.push(homeModel);
              userFound.guests.push(guestModel);
              userFound.save(function(err) {
                if (!err) {
                  successCallback();
                }
                else {
                  errorCallback();
                }
              });
            }
          });
        }
      });

This treatement doesn't result in any error. But it doesn't work as intended when I stringify the user.guests I get :

guests: 
   [ { coming: 'dnk-coming',
       edited: false,
       draft: true,
       _id: 53dcda201fc247c736d87a95,
       _home: 53dce0f42d5c1a013da0ca71,
       __v: 0 }]

wich is absolutly fine I get the _home id etc... Then I stringify the user.homes and I get :

  homes: 
   [ { draft: true,
       edited: false,
       guests: [],
       _id: 53dce0f42d5c1a013da0ca71,
       __v: 0 } ]

According to the doc guests should be setted, but it's not <-- this is my issue. Please help me to figure out what I'm doing wrong. I could set it manualy but according to the doc it's not suppose to work this way I think.

guestModel.save(function(err) {...

this is wrong because you are embedding the guests in the userSchema. So skip the guestModel.save and just push the guestModel in userFound

An embedded document can never a reference. You can't point to it without obtaining the parent document. So you can't do both embedding and keeping a ref to the embedded document. You should choose between either embedding or adding a ref.

My suggestion would be to design your schemas like this. Store guests in a separate collection. Store the ref to guest in user and home schemas. If you want to store some relationship data you can store along with the ref like [{guestId:{type:Schema.Types.ObjectId,ref:'Guest'},field1:{type:...},field2:{...}..] and if you just want the ref [{type:Schema.Types.ObjectId,ref:'Guest'}]