Header

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque faucibus lobortis enim, eu sodales risus bibendum vitae. Phasellus aliquam ultrices sem non posuere. Aenean finibus a massa nec euismod. Donec ullamcorper, sapien rhoncus tempor rhoncus, purus arcu eleifend mauris, ullamcorper maximus magna arcu vel purus. Sed consequat nibh ipsum, vitae commodo risus rhoncus in. Morbi et dolor ultrices, finibus urna at, hendrerit ex. Morbi suscipit eget leo quis vehicula. Curabitur eu lacinia turpis. Sed ut bibendum nisl.

Integer id turpis magna. Nunc lectus lectus, pellentesque vel vulputate ac, pharetra eu tortor. Phasellus arcu erat, pellentesque et nibh non, dignissim scelerisque lacus. Pellentesque mattis ipsum a tincidunt porttitor. Suspendisse ut congue magna. Donec aliquam lectus libero, in feugiat dolor ornare sit amet. Nulla et molestie libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec aliquet ac turpis vitae elementum. Nullam volutpat mattis leo, id facilisis orci porta nec. Nulla vel faucibus ex, et gravida felis. Nulla facilisi. Donec ut felis ut ante fringilla dapibus id sed mi. Donec a blandit velit, id ultricies risus. Vivamus bibendum odio sit amet vehicula tincidunt. Phasellus blandit dui urna, blandit venenatis erat tincidunt eget. Nunc pretium sodales ligula, ut faucibus orci elementum sit amet. Curabitur luctus, est in rutrum congue, est lorem luctus dui, vitae auctor libero lacus ut enim. Nullam neque est, pellentesque ac viverra pretium, varius ut risus.

Pellentesque blandit quam turpis, sit amet ullamcorper dui malesuada tincidunt. Donec ac mattis urna, nec posuere nunc. Aenean non urna ultrices, convallis mauris non, efficitur lacus. Duis eget metus sed magna convallis lobortis ac et est. Suspendisse tincidunt ligula arcu. Aenean at euismod elit, a suscipit ante. Nulla porttitor sit amet justo et vestibulum. Cras sodales leo a velit tempor, sit amet commodo odio tincidunt. In nec tempus dolor. In bibendum sodales enim nec rhoncus.

Duis convallis a ante vel imperdiet. Vivamus nec arcu mollis, malesuada felis sit amet, aliquet elit. Aliquam erat volutpat. Morbi consequat orci sit amet tellus convallis laoreet. Nunc sed suscipit neque. Fusce convallis nisi ligula, et maximus lorem tincidunt eu. Morbi nec venenatis justo. Morbi laoreet lectus at vestibulum placerat. Pellentesque bibendum magna velit, convallis euismod leo fringilla vel. Duis maximus elementum enim, dignissim accumsan ex finibus ac. Aliquam erat volutpat. Etiam sit amet commodo enim. Pellentesque ac est eget ipsum fermentum facilisis sit amet sed nisl.

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));
}