Header

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent congue dictum rutrum. Aliquam erat volutpat. Vestibulum consectetur eu massa ac mattis. Fusce vulputate fringilla metus, tincidunt molestie nisl rutrum ac. Mauris finibus mollis egestas. Nam lectus purus, interdum a mauris non, imperdiet ornare leo. Donec interdum, elit ac bibendum semper, velit urna tempus lorem, non dapibus eros lectus vitae lectus. Aliquam interdum, sapien ac interdum sodales, odio magna suscipit velit, eu vestibulum ex augue eget lorem. Cras eu placerat lorem, ac interdum urna.
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/test');
mongoose.set('debug', true);

const vehicleSchema = new mongoose.Schema({
  make: String,
  model: String,
  year: Number,
  customerId: mongoose.Schema.Types.ObjectId
});

const customerSchema = new mongoose.Schema({
  vehicle: { type: vehicleSchema, required: true }
});

// Callback-style middleware, your only option in 4.x
vehicleSchema.pre('save', function(next) {
  Customer.updateMany({ 'vehicle._id': this._id }, { $set: { vehicle: this } }, (error) => {
    next(error);
  });
});

const Vehicle = mongoose.model('Vehicle', vehicleSchema);
const Customer = mongoose.model('Customer', customerSchema);

run().catch(error => console.error(error.stack));

async function run() {
  const v = await Vehicle.create({ make: 'Subaru', model: 'Crosstrek', year: 2016 });
  let customer = await Customer.create({ vehicle: v });

  v.year = 2018;
  await v.save();

  // `year` will be '2018'
  console.log(await Customer.findById(customer._id));
}