const mongoose = require('mongoose');
mongoose
.connect('mongodb://localhost/playground')
.then(() => console.log('Connected to MongoDB...'))
.catch(err => console.error('could not connect to MongoDB...', err));
const courseSchema = new mongoose.Schema(
{
name: {
type: String,
required: true,
minlength: 5,
maxlength: 255
},
category: {
type: String,
required: true,
enum: ['web', 'mobile', 'network'],
lowercase: true,
trim: true
},
author: String,
tags: {
type: Array,
validate: {
isAsync: true,
validator: function(value, callback) {
setTimeout(() => {
const result = value && value.length > 0;
callback(result);
}, 1000);
},
message: 'A course should have at least one tag'
}
},
date: { type: Date, default: Date.now },
isPublished: Boolean,
price: {
type: Number,
required: function() {
return this.isPublished;
},
min: 10,
max: 200,
get: value => Math.round(value),
set: value => Math.round(value)
}
},
{
toObject: {
getters: true
}
}
);
const Course = mongoose.model('Course', courseSchema);
async function createCourse() {
const course = new Course({
name: 'jquery Course',
category: 'Web',
author: 'Carlos',
tags: ['frontend', 'javascript'],
isPublished: true,
price: 23.05
});
try {
const result = await course.save();
console.log(result);
} catch (e) {
for (field in e.errors) {
console.error(e.errors[field].message);
}
}
}
createCourse();
// Connected to MongoDB...
// { tags: [ 'frontend', 'javascript' ],
// date: 2019-01-07T08:10:45.185Z,
// _id: 5c330985e494490730c29527,
// name: 'jquery Course',
// category: 'web',
// author: 'Carlos',
// isPublished: true,
// price: 23,
// __v: 0,
// id: '5c330985e494490730c29527' }