Python - How to Implement Timed-Function which gets Timeout After Specified Max Timeout Value
Introduction We often require to execute in timed manner, i.e. to specify a max…
May 06, 2020
Mongoose provides a simple schema based solution to model your app-data. In this post, we will see how we can sue it to write basic CRUD operations in Nodejs.
First lets write a mongoose schema for a sample requirement. Example entity is Team, where I want to save:
First lets take a look on how the JSON data will look like:
{
name: "My Super Team",
createdBy: "[email protected]",
members: [
{
email: "[email protected]",
role: "admin"
},
{
email: "[email protected]",
role: "user"
},
{
email: "[email protected]",
role: "admin"
}
]
}
Lets write it in mongoose schema language.
'use strict';
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const timestamps = require('mongoose-timestamp');
const TeamMemberSchema = new Schema({
email: String,
role: String
});
TeamMemberSchema.plugin(timestamps);
const TeamSchema = new Schema({
name: String,
createdBy: String,
members: [TeamMemberSchema]
}, {
w: 'majority',
wtimeout: 10000,
collation: { locale: 'en', strength: 1 }
});
TeamSchema.plugin(timestamps);
module.exports = mongoose.model('Team', TeamSchema);
The model above is self explanatory. I have used a timestamp plugin for mongoose, which will automatically put two fields:
Also, I have used a nested schema in above example. There is another important thing to see is that I have not defined _id field. Mongoose will automatically create this, if I have not mentioned it in my schema. I can also define how I would want my _id field to be generated.
add(args) {
if (!args.name || !args.email) {
return Promise.reject(new Error('Paass team name and creator email'));
}
//using winston logging
logger.log('info', 'Adding team', {name: args.name, createdBy: args.email});
let obj = new Team();
obj.name = args.name;
obj.createdBy = args.email;
obj.members = [{
email: args.email,
role: args.role
}];
return obj.save();
}
Above code is pretty simple. You can add more robust checks, and error conditions. You might want to set data in cache.
There are several ways you can update your record, it all depends on your need. Lets see few simple examples:
Say, we want to update team name.
By loading complete object
updateTeam(teamId, teamName) {
return Team.findById(teamId)
.then(team => {
if (!team) {
return Promise.reject(new Error('Team not found'));
}
team.name = teamName;
return team.save();
});
return Team.upate({_id: args.teamId}, {
}
By NOT loading complete object
updateTeam(teamId, teamName) {
return Team.upate({_id: args.teamId}, {
name: teamName
});
}
There are bunch of options to do update. You might want to see various options in mongoose documentation.
getById(teamId) {
return Team.findById(teamId)
}
delete(teamId) {
return Team.deleteOne({_id: teamId})
}
The examples above are simple and easy to understand. Let me know if if you have some comments.
Introduction We often require to execute in timed manner, i.e. to specify a max…
Introduction When I migrated all of my drupal-7 website to drupal-8, I wrote…
After 2 days, there was my demo. I deployed my nodejs code on lambda function…
Introduction In previous posts, we saw how to build FIPS enabled Openssl, and…
Introduction In this post, we will see ways to look at git history logs. For…
Introduction It is very important to introduce few process so that your code and…
Introduction This post has the complete code to send email through smtp server…
Introduction In a normal email sending code from python, I’m getting following…
Introduction In one of my app, I was using to talk to . I have used some event…
Introduction So you have a Django project, and want to run it using docker image…
Introduction It is very important to introduce few process so that your code and…
Introduction In this post, we will see a sample Jenkin Pipeline Groovy script…