using find by id and update mongoose code example
Example 1: findone and update mongoose
// Using queries with promise chaining
Model.findOne({ name: 'Mr. Anderson' }).
then(doc => Model.updateOne({ _id: doc._id }, { name: 'Neo' })).
then(() => Model.findOne({ name: 'Neo' })).
then(doc => console.log(doc.name)); // 'Neo'
// Using queries with async/await
const doc = await Model.findOne({ name: 'Neo' });
console.log(doc.name); // 'Neo'
Example 2: mongoose get id after save
n.save(function(err,room){
var newRoomId = room._id;
});
Example 3: mongoose update subdocument by id
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const saltRounds = 10;
const Role = require('../config/roles')
const subscription = require('./subscriptionModel')
const Schema = mongoose.Schema;
const userModel = new Schema({
created: { type: Date, default: Date.now },
updated: { type: Date, default: Date.now},
fullname: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
birthDate: {
type: String,
required: true
},
password: {
type: String,
required: true
},
profileImage: {
type: String
},
role: {
type: String,
default: Role.user
},
subscriptions: [subscription.modelName]
})
// hash user password before saving into database
userModel.pre('save', async function save(next) {
if (!this.isModified('password')) return next();
try {
const salt = await bcrypt.genSalt(saltRounds);
this.password = await bcrypt.hash(this.password, salt);
return next();
} catch (err) {
return next(err);
}
});
// Compare passwords when user tries to log in.
userModel.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if (err) return cb(err);
cb(null, isMatch);
});
};
module.exports = mongoose.model('User', userModel)