You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
4.7 KiB
JavaScript

// CRUD Operations
/*
- CRUD Operations are the heart of any backend application.
- Mastering the CRUD operations is essential for any developer
- CRUD stands for CREATE, READ, UPDATE, and DELETE
*/
// [SECTION] Inserting documents (Create)
// Insert One Document
/*
Syntax:
db.collectionName.insertOne({object});
*/
db.users.insertOne({
firstName: "Jane",
lastName: "Doe",
age: 21,
contact: {
phone: "87654321",
email: "janedoe@gmail.com"
},
course: ["CSS", "JavaScript", "Python"],
department: "none"
});
// Insert Many
/*
Syntax:
db.collectionName.insertMany([{Object A}, {Object B}]);
*/
db.users.insertMany([
{
firstName: "Stephen",
lastName: "Hawking",
age: 79,
contact: {
phone: "87654321",
email: "stephenhawking@gmail.com"
},
course: ["Python", "React", "PHP"],
department: "none"
},
{
firstName: "Neil",
lastName: "Armstrong",
age: 82,
contact: {
phone: "87654321",
email: "neilarmstrong@gmail.com"
},
course: ["React", "Laravel", "Sass"],
department: "none"
}
]);
// [SECTION] Finding Documents (Read)
// Find Single Document
/*
Syntax:
db.collectionName.findOne();
db.collectionName.findOne({ field: value });
*/
// Leaving the search criteria empty will retrieve ALL the documents
db.users.find();
// This will retrieve the first document
db.users.findOne();
// criteria
db.users.findOne({ firstName: "Stephen" });
// Finding Multiple Documents
/*
Syntax:
db.collectionName.find({ fieldA: valueA });
*/
db.users.find({ department: "none" });
// Finding multiple documents with multiple parameters (criteria)
db.users.find({ department: "none", age: 82 });
// [SECTION] Updating Documents (Update)
// Updating a single document
// Creating document to update
db.users.insertOne({
firstName: "Test",
lastName: "Test",
age: 0,
contact: {
phone: "000000",
email: "test@gmail.com"
},
courses: [],
department: "none"
});
/*
- Just like the "find" methos, methods that only manipulate a sigle document will only manipulate a single document will only update the FIST document that matches the search criteria
- Syntax:
db.collectionName.updateOne({criteria}, {$set: {field: value}});
*/
db.users.updateOne({ firstName: "Test" }, {
$set: {
firstName: "Bill",
lastName: "Gates",
age: 65,
contact: {
phone: "12345678",
email: "bill@gmail.com"
},
courses: ["PHP", "Laravel", "HTML"],
department: "Operations",
status: "active"
}
});
db.users.find({ firstName: "Bill" });
// Another Example using _id
db.users.updateOne({ _id: ObjectId("6514da527c5d7043df600f54") }, {
$set: {
firstName: "Elon",
lastName: "Musk",
age: 65,
contact: {
phone: "12345678",
email: "elon@gmail.com"
},
courses: ["PHP", "Laravel", "HTML"],
department: "Operations",
status: "active"
}
});
db.users.updateOne({ _id: ObjectId("6514da527c5d7043df600f54") }, {
$set: {
firstName: "Bill",
lastName: "Gates"
}
});
// Updating multiple documents
/*
Syntax:
db.collectionName.updateMany({ criteria }, {$set: { field: value }});
*/
db.users.updateMany({department: "none"}, {
$set: {
department: "HR"
}
});
db.users.find();
// Replace One
/*
- Can be used if replacing the whole document is necessary.
- Syntax:
db.collectionName.replaceOne( { criteria }, { field: value } );
*/
db.users.replaceOne({firstName: "Bill"}, {
firstName: "Bill",
lastName: "Gates",
age: 70,
contact: {
phone: "123123123",
email: "billgates@gmail.com"
},
courses: ["PHP", "Laravel", "CSS"],
department: "Operations"
});
// [SECTION] Deleting Documents (Delete)
// Create a document to delete
db.users.insert({
firstName: "test"
});
// Deleting a single Document
/*
Syntax:
db.collectionName.deleteOne({criteria});
*/
db.users.deleteOne({
firstName: "test"
});
db.users.find();
// Delete Many
/*
DO NOT USE: db.collectionName.deleteMany();
Syntax:
db.collectionName.deleteMany({criteria});
*/
db.users.deleteMany({
firstName: "Bill"
});
db.users.find();
// TAKE HOME QUIZ
// [SECTION] Advanced Queries
// 1. Query an embedded document
/*
- find all the document with the following contact:
phone: "87654321",
email: "stephenhawking@gmail.com"
*/
// 2. Query on nested Field
/*
- find the document that has an email of "janedoe@gmail.com"
*/
// 3. Query an Array with Exact Elements
/*
- find a document with the has the courses
- CSS
- JavaScript
- Python
*/
// 4. Querying an array without regard to order
/*
- find all the documents with the following courses
- React
- Python
*/