Initializing a ref array in Mongoose

Say I have the following schemas:

var promoGroupSchema = new Schema({
    title: String,
    offers: [{Schema.Types.ObjectId, ref: 'Offer']
});

and

var offerSchema = new Schema({
    type: String
});

How do you initialize a promoGroup with new offers? The following won't work since save() is asynchronous. Now, I know I could put a function as a parameter of the save function, but that gets ugly with more offers.

var offer1 = new offerSchema({
    type: "free bananas!"
});

var offer2 = new offerSchema({
    type: "free apples!"
});

offer1.save();
offer2.save();

var newPromoGroup = new promoGroupSchema({
    title: "Some title here",
    offers: [offer1._id, offer2._id]
});

From what I read, Mongoose gives the object an _id as soon as you create them, can I rely on those?

You should access _id in the save callback. If you have a lot of offers to group, using a library like async will make your life easier.

var myOffers = [...]; // An array with offers you want to group together

// Array of functions you want async to execute
var saves = myOffers.map(function(offer) {
    return function(callback) {
        offer.save(callback);
    }
}

// Run maximum 5 save operations in parallel
async.parallelLimit(saves, 5, function(err, res) {
    if(err) {
        console.log('One of the saves produced an error:', err);
    }
    else {
        console.log('All saves succeeded');
        var newPromoGroup = new promoGroupSchema({
            title: "Some title here",
            offers: _.pluck(myOffers, '_id') // pluck: see underscore library
        });
    }
});

You could also try to use Promises.