Skip to content

Instantly share code, notes, and snippets.

@VRamazing
Created February 20, 2025 15:29
Show Gist options
  • Save VRamazing/490ee6f4e06cf9ccbca26810573e1934 to your computer and use it in GitHub Desktop.
Save VRamazing/490ee6f4e06cf9ccbca26810573e1934 to your computer and use it in GitHub Desktop.
Mongoose model
require('dotenv').config();
// TODO move to singleton pattern
const mongoose = require("mongoose")
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }, (err)=> {
console.log("DB Error", err)
});
const personSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
age: Number,
favoriteFoods: [String]
})
const Person = mongoose.model("Person", personSchema)
const person = Person({
name: "veer",
age: 30,
favoriteFoods: ["Vada Sambhar "]
})
const createAndSavePerson = (done) => {
person.save(function(err, data) {
if(err){
console.log(err)
}
done(null, data)
});
};
const createManyPeople = (arrayOfPeople, done) => {
Person.insertMany(arrayOfPeople).then(data => {
done(null, data);
}).catch(err => {
console.log(err)
})
};
const findPeopleByName = (personName, done) => {
Person.find({
name: personName
}).then(data => {
done(null, data)
}).catch(err => {
console.log(err)
})
};
const findOneByFood = (food, done) => {
Person.findOne({
favoriteFoods: food
}).then(data => {
done(null, data)
}).catch(err => {
console.log(err)
})
};
const findPersonById = (personId, done) => {
Person.findById({
_id: personId
}).then(data => {
done(null, data)
}).catch(err => {
console.log(err)
})
};
const findEditThenSave = (personId, done) => {
const foodToAdd = "hamburger";
Person.findById({
_id: personId
}).then(data => {
data["favoriteFoods"] = [...data["favoriteFoods"], foodToAdd]
data.save((err, data) => {
if(err){
console.log(err)
}
done(null, data)
})
console.log(data)
}).catch(err => {
console.log(err)
})
};
const findAndUpdate = (personName, done) => {
const ageToSet = 20;
Person.findOneAndUpdate({
name: personName
},
{
age: ageToSet
},
{
new: true
}
).then(data => {
done(null, data);
}).catch(err => {
console.log(err)
})
};
const removeById = (personId, done) => {
Person.findOneAndRemove({
_id: personId
}
).then(data => {
done(null, data);
}).catch(err => {
console.log(err)
})
};
const removeManyPeople = (done) => {
const nameToRemove = "Mary";
Person.remove({
name: nameToRemove
}, (err, res) => {
if(err) console.log(err)
done(null, res);
})
};
const queryChain = (done) => {
const foodToSearch = "burrito";
Person.find({
favoriteFoods: foodToSearch
}).sort({
name: 1
}).limit(2)
.select({
age: false
}).exec().then(data => {
done(null, data);
}).catch(err => {
console.log(err)
})
};
/** **Well Done !!**
/* You completed these challenges, let's go celebrate !
*/
//----- **DO NOT EDIT BELOW THIS LINE** ----------------------------------
exports.PersonModel = Person;
exports.createAndSavePerson = createAndSavePerson;
exports.findPeopleByName = findPeopleByName;
exports.findOneByFood = findOneByFood;
exports.findPersonById = findPersonById;
exports.findEditThenSave = findEditThenSave;
exports.findAndUpdate = findAndUpdate;
exports.createManyPeople = createManyPeople;
exports.removeById = removeById;
exports.removeManyPeople = removeManyPeople;
exports.queryChain = queryChain;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment