-
Notifications
You must be signed in to change notification settings - Fork 0
Querying πΉ
Table Of Contents
- Create Documents
- Read Documents
- Update Documents
- Delete Documents
// Preparing a document
> doc = { "title": "Tacos", "desc" : "Yummie tacos", "cook_time" : 20 };
{ "title" : "Tacos", "desc" : "Yummie tacos", "cook_time" : 20 }
// Insert the document "doc" to "recipes" Collection
> db.recipes.insertOne(doc)
// Success.
{
"acknowledged" : true,
"insertedId" : ObjectId("62a29c6859e7529499943d7c")
}
> doc = { "title": "Tacos", "desc" : "Yummie tacos", "cook_time" : 20 };
{ "title" : "Tacos", "desc" : "Yummie tacos", "cook_time" : 20 }
> doc2 = { "title": "Tacos-2", "desc" : "Yummie tacos", "cook_time" : 20 };
{ "title" : "Tacos-2", "desc" : "Yummie tacos", "cook_time" : 20 }
// Insert an Array of Documents
> db.recipes.insertMany([doc, doc2]);
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("62a5304b5ea12a1ef17a0039"),
ObjectId("62a5304b5ea12a1ef17a003a")
]
}
// Find All Documents in "recipes" Collection
> db.recipes.find()
// Return Document(s) with an ID (it contains an encoded daytime)
{ "_id" : ObjectId("62a29c6859e7529499943d7c"), "title" : "Tacos", "desc" : "Yummie tacos", "cook_time" : 20 }
// Find All Documents in "recipes" Collection and Display it with Pretty Print
> db.recipes.find().pretty()
// Return Document(s) and Display it Pretty
{
"_id" : ObjectId("62a29c6859e7529499943d7c"),
"title" : "Tacos",
"desc" : "Yummie tacos",
"cook_time" : 20
}
> db.recipes.find({"title" : "Tacos"}).pretty();
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"calories_per_serving" : 210,
"cook_time" : 20,
"desc" : "Classic Mexican tacos",
"directions" : [
"Brown beef",
"Add taco seasoning and water, mix",
"Bring to boil",
"Lower heat to simmer 5-10 minutes until desired consistency",
"Put meat in tacos"
],
"ingredients" : [
{
"name" : "ground beef (lean)",
"quantity" : {
"amount" : 1,
"unit" : "lbs"
}
},
{
"name" : "taco seasoning",
"quantity" : {
"amount" : 2,
"unit" : "oz"
}
},
{
"name" : "corn hard tacos",
"quantity" : {
"amount" : 12,
"unit" : "oz"
}
}
],
"likes" : [
1,
415
],
"likes_count" : 2,
"prep_time" : 10,
"rating" : [
4,
4,
3,
4,
2,
5,
2,
2,
4,
5
],
"rating_avg" : 3.5,
"servings" : 4,
"tags" : [
"mexican",
"quick",
"easy",
"ground beef"
],
"type" : "Dinner"
}
By default, the query result returns all document fields. It is possible to specify the fields you want. To do so, you need to provide a second parameter to find (include attribute = 1).
// Find a document with title "Tacos". The result document should return only "title" attribute.
> db.recipes.find({"title" : "Tacos"}, {"title" : 1}).pretty();
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
// Find a document with title "Tacos". The result document should return "title" and "type" attributes.
> db.recipes.find({"title" : "Tacos"}, {"title" : 1, "type" : 1}).pretty();
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"type" : "Dinner"
}
By default, the query result returns all document fields. It is possible to specify the fields you want. To do so, you need to provide a second parameter to find (include attribute = 1, exclude attribute = 0).
// Find a document with title "Tacos". The result document should return "title" and "type" attributes and exclude the Id.
> db.recipes.find({"title" : "Tacos"}, {"title" : 1, "type" : 1, "_id" : 0}).pretty();
{ "title" : "Tacos", "type" : "Dinner" }
// Find a document with title based on a regex. The result documents should return "title" attribute.
> db.recipes.find({"title" : {$regex : /taco/i }}, {"title" : 1});
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
The limit() function in MongoDB is used to specify the maximum number of results to be returned.
> db.recipes.find({ "title" : {$regex : /taco/i} }, {"title" : 1}).limit(1).pretty();
{
"_id" : ObjectId("5e6fd805fa98021236426a24"),
"title" : "Chicken Soft Tacos"
}
The sort() method consists of two basic building blocks. These building blocks are fields to be sorted and the sort order. [1]
- 1 : ASC
> db.recipes.find({}, {"title" : 1}).sort({"title" : 1})
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
- -1 : DESC
> db.recipes.find({}, {"title" : 1}).sort({"title" : -1})
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
The skip() method will skip the first n document from the query result
> db.recipes.find({}, {"title" : 1}).sort({"title" : -1}).skip(2);
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
- $lt : Matches values that are less than a specified value.
- $lte : Matches values that are less than or equal to a specified value.
- $gt : Matches values that are greater than a specified value.
- $gte : Matches values that are greater than or equal to a specified value.
- $in : Matches any of the values specified in an array.
// Find documents titles in recipes where cook_time <= 30 min **and** preparation time <= 10 min
> db.recipes.find({ "cook_time" : {$lte : 30}, "prep_time" : {$lte : 10} }, {"title" : 1});
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
// Find documents titles in recipes where cook_time <= 30 min **or** preparation time <= 10 min
> db.recipes.find({ $or : [{"cook_time":{$lte:30}} , {"prep_time":{$lte:10}}] }, {"title" : 1});
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
Matches arrays that contain all elements specified in the query.
> db.recipes.find( {"tags" : { $all : ["easy", "quick"] } }, {"title" : 1, "tags" : 1}).pretty()
{
"_id" : ObjectId("5e6fd805fa98021236426a24"),
"title" : "Chicken Soft Tacos",
"tags" : [
"mexican",
"quick",
"easy",
"chicken"
]
}
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"tags" : [
"mexican",
"quick",
"easy",
"ground beef"
]
}
Matches any of the values specified in an array.
> db.recipes.find({"tags" : { $in : ["easy", "quick"] } }, {"title" : 1, "tags" : 1} ).pretty()
{
"_id" : ObjectId("5e6fd805fa98021236426a24"),
"title" : "Chicken Soft Tacos",
"tags" : [
"mexican",
"quick",
"easy",
"chicken"
]
}
{
"_id" : ObjectId("5e87856d07beb474c074c5ca"),
"title" : "Brown Sugar Meatloaf",
"tags" : [
"ground beef",
"family meal",
"easy"
]
}
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"tags" : [
"mexican",
"quick",
"easy",
"ground beef"
]
}
{
"_id" : ObjectId("5edf1d313260aab97ea0d589"),
"title" : "Zucchini Brownies",
"tags" : [
"sweets",
"easy"
]
}
The Set operator replaces the value of a field with the specified value
Note :
- If the attribute does not exist, it will be inserted.
> db.recipes.find({}, {"title" : 1});
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
{ "_id" : ObjectId("62a5304b5ea12a1ef17a0039"), "title" : "Tacos" }
{ "_id" : ObjectId("62a5304b5ea12a1ef17a003a"), "title" : "Tacos-2" }
// Update Title : "Maple Smoked Salmon" to "Maple Smoked Salmon v2"
> db.recipes.updateOne({"title" : "Maple Smoked Salmon"}, {$set : { "title" : "Maple Smoked Salmon v2"}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
// Update vegan attribute. It will be added as it is not available
> db.recipes.updateOne({"title" : "Maple Smoked Salmon v2"}, {$set : { "vegan" : false}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
The unset operator deletes a particular field.
// Given the following document where we inserted a new field
> db.recipes.find({"title" : "Maple Smoked Salmon v2"}, { "title" :1, "vegan" : 1 }).pretty()
{
"_id" : ObjectId("5e878f5220a4f574c0aa56db"),
"title" : "Maple Smoked Salmon v2",
"vegan" : false
}
// In order to delete "vegan" field, we will perform an unset
> db.recipes.updateOne({"title" : "Maple Smoked Salmon v2"}, {$unset:{"vegan":1}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
The inc operator increments a field by a specified value.
// Given the field "likes_count", we would like to increment the existing value by 1
> db.recipes.find({"title" : "Maple Smoked Salmon v2"}, {"title" : 1, "likes_count" : 1}).pretty()
{
"_id" : ObjectId("5e878f5220a4f574c0aa56db"),
"title" : "Maple Smoked Salmon v2",
"likes_count" : 1
}
// Inc operator usage on update
> db.recipes.updateOne({"title" : "Maple Smoked Salmon v2"}, {$inc : {"likes_count" : 1}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
// After update
> db.recipes.find({"title" : "Maple Smoked Salmon v2"}, {"title" : 1, "likes_count" : 1}).pretty()
{
"_id" : ObjectId("5e878f5220a4f574c0aa56db"),
"title" : "Maple Smoked Salmon v2",
"likes_count" : 2
}
The push operator appends a specified value to an array.
// Given a Tacos with likes array : [1, 415] (refers to User IDs).
> db.recipes.find({"title" : "Tacos"}, {"title" : 1, "likes" : 1}).pretty();
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"likes" : [
1,
415
]
}
// Let's Push an other User ID to simulate a Like.
> db.recipes.updateOne({"title" : "Tacos"}, {$push: { "likes":60 } } );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
// After Push, User ID 60 added. In case the array we are looking to push to does not exists, the field and the values will not be inserted.
> db.recipes.find({"title" : "Tacos"}, {"title" : 1, "likes" : 1}).pretty();
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"likes" : [
1,
415,
60
]
}
The pull operator removes from an existing array all instances of a value or values that match a specified condition.
// Given a document with likes array. We would like to remove a user id. Example : User Id -> 415.
> db.recipes.find({"title" : "Tacos"}, {"title" : 1, "likes" : 1}).pretty();
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"likes" : [
1,
415,
60
]
}
// Pull 415 from likes array
> db.recipes.updateOne({"title" : "Tacos"}, {$pull: { "likes":415 } } );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
// After update
> db.recipes.find({"title" : "Tacos"}, {"title" : 1, "likes" : 1}).pretty();
{
"_id" : ObjectId("5e5e9c470d33e9e8e3891b35"),
"title" : "Tacos",
"likes" : [
1,
60
]
}
To delete a single document, use deleteOne().
// Given The following documents, we would like to delete a document where title is Tacos-2.
> db.recipes.find({}, {"title" : 1});
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon v2" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
{ "_id" : ObjectId("62a5304b5ea12a1ef17a0039"), "title" : "Tacos" }
{ "_id" : ObjectId("62a5304b5ea12a1ef17a003a"), "title" : "Tacos-2" }
// Use delete one
> db.recipes.deleteOne({"title": "Tacos-2"});
{ "acknowledged" : true, "deletedCount" : 1 }
// After deletion
> db.recipes.find({}, {"title" : 1});
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon v2" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
{ "_id" : ObjectId("62a5304b5ea12a1ef17a0039"), "title" : "Tacos" }
To delete many documents, use deleteMany().
// Given The following documents, we would like to delete documents where titles are Tacos, Maple Smoked Salmon v2.
> db.recipes.find({}, {"title" : 1});
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon v2" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5e5e9c470d33e9e8e3891b35"), "title" : "Tacos" }
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
{ "_id" : ObjectId("62a5304b5ea12a1ef17a0039"), "title" : "Tacos" }
// Delete 02 documents
> db.recipes.deleteMany({"title": "Tacos"}, {"title" : "Maple Smoked Salmon v2"});
{ "acknowledged" : true, "deletedCount" : 2 }
// After Deletion
> db.recipes.find({}, {"title" : 1});
{ "_id" : ObjectId("5e878f5220a4f574c0aa56db"), "title" : "Maple Smoked Salmon v2" }
{ "_id" : ObjectId("5e6fd805fa98021236426a24"), "title" : "Chicken Soft Tacos" }
{ "_id" : ObjectId("5e87856d07beb474c074c5ca"), "title" : "Brown Sugar Meatloaf" }
{ "_id" : ObjectId("5e877cba20a4f574c0aa56da"), "title" : "Pancakes" }
{ "_id" : ObjectId("5edf1d313260aab97ea0d589"), "title" : "Zucchini Brownies" }
{ "_id" : ObjectId("5edf1cd43260aab97ea0d588"), "title" : "Apple Pie" }
Β© 2024 | Lyes Sefiane
All Rights Reserved | CC BY-NC-ND 4.0