How can i do the right population of subdocuments with mongoose?

Like u can see in this code i want to create the classic app to register the users, products, and orders who belongs to an user.

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/orders');

var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;



var ProductSchema = Schema({
    code: String,
    name: String,
    description: String
});

var Product = mongoose.model('Product', ProductSchema);

var OrderSchema = Schema({
    user: {type: ObjectId, ref:'User'},
    products: [{
        product: {type: ObjectId, ref: 'Product'},
        quantity: {type: Number}
    }]
});

var Order = mongoose.model('Order', OrderSchema);

var UserSchema = Schema({
    name: String,
    email: String,
    orders: [{type: ObjectId, ref: 'Order'}]
});

var User = mongoose.model('User', UserSchema);

/* I split my code on 4 steps to try to make it more easy to test. for each test i have to set the step, and executing again the file. node testfile.js */

var step = 1;

// Here i create the products and save it.

if(step == 1){

    var product1 = new Product({
        code: '001',
        name: 'somename1',
        description: 'some description 1'
    });

    product1.save(function(e, product1){
        if(!e){
            console.log('Product 1 saved.');
        }
    });

    var product2 = new Product({
        code: '002',
        name: 'somename2',
        description: 'some description 2'
    });

    product2.save(function(e, product2){
        if(!e){
            console.log('Product 2 saved.');    
        }

    });



}else if(step == 2){

// here i am creating the customer

    // Creating the customer
    var Customer = new User({
        name: 'Erick',
        email: 'myemail@dot.com'
    });

    Customer.save(function(e, customer){
        if(!e){
            console.log('Customer '+customer.name+' saved.');
        }
    });
}else if(step ==3){

/* Here i am creting the order, then searching the products and adding them to the order, i dont know if this is the right way, if someone can explain me some right way i will be thankful */

            // Creating the order for the user Erick
    User.findOne({name: 'Erick'}, function(e, user){
        if(!e){

            var ord = new Order({
                user: user._id
            });
            // Adding the first product
            Product.findOne({code: '001'}, function(e, productc1){
                if(!e){
                    ord.products.push({product: productc1._id, quantity: 2});

                    // Adding the second product
                    Product.findOne({code: '002'}, function(er, productc2){
                        if(!er){
                            ord.products.push({product: productc2._id, quantity: 3});

                            //console.log(ord);

                            // Now saving the order
                            ord.save(function(err, ord){
                                if(!err){
                                    console.log('Order saved.');
                                    // now i add the push the order to the user
                                    user.orders.push(ord._id);
                                    user.save(function(errr, usr){
                                        if(!errr){
                                            console.log('Order Added to the user');
                                            console.log(usr);
                                        }
                                    })                                  
                                }
                            })
                        }
                    });


                }
            });
        };
    });
}else if(step == 4){

/* Here i am trying to get the user with his orders, and populated each order with the items who belong but when i try "populate('orders.products.product')" i am getting the error " TypeError: CAnnot call method 'path' of undefined.

how should i populate?

*/

    User.findOne({name: 'Erick'}).populate('orders').exec(function(e, erick){
        if(!e){
            console.log(erick); 
        }       
    });
}