diff --git a/databases/mongodb.sh b/databases/mongodb.sh new file mode 100644 index 0000000..e8da009 --- /dev/null +++ b/databases/mongodb.sh @@ -0,0 +1,225 @@ +# ***************************************************************************** +# BASICS +# ***************************************************************************** + +# Connect MongoDB Shell +mongo # connects to mongodb://127.0.0.1:27017 by default +mongo --host --port -u -p # omit the password if you want a prompt + +# Show All Databases +show dbs + + +# Show Current Database +db + + +# Create Or Switch Database +use + + +# Drop Database +db.dropDatabase() + + +# Create Collection +db.createCollection('posts') + + +# Show Collections +show collections + + +# ***************************************************************************** +# CRUD +# ***************************************************************************** + +# Insert Row +db.posts.insert({ + title: 'Post One', + body: 'Body of post one', + category: 'News', + tags: ['news', 'events'], + user: { + name: 'John Doe', + status: 'author' + }, + date: Date() +}) + + +# Insert Multiple Rows +db.posts.insertMany([ + { + title: 'Post Two', + body: 'Body of post two', + category: 'Technology', + date: Date() + }, + { + title: 'Post Three', + body: 'Body of post three', + category: 'News', + date: Date() + }, + { + title: 'Post Four', + body: 'Body of post three', + category: 'Entertainment', + date: Date() + } +]) + + +# Get All Rows +db.posts.find() + + +# Get All Rows Formatted +db.posts.find().pretty() + + +# Find One Row +db.posts.findOne({ category: 'News' }) + + +# Find Rows +db.posts.find({ category: 'News' }) + + +# Find Specific Fields +db.posts.find({ title: 'Post One' }, { + title: 1, + author: 1 +}) + + +# Update Row +db.posts.update({ title: 'Post Two' }, +{ + title: 'Post Two', + body: 'New body for post 2', + date: Date() +}, +{ + upsert: true +}) + + +# Update Specific Field +db.posts.update({ title: 'Post Two' }, +{ + $set: { + body: 'Body for post 2', + category: 'Technology' + } +}) + + +# Delete Row +db.posts.remove({ title: 'Post Four' }) + + +# ***************************************************************************** +# OTHER FUNCTIONS +# ***************************************************************************** + +# Sort Rows +db.posts.find().sort({ title: 1 }).pretty() # asc +db.posts.find().sort({ title: -1 }).pretty() # desc + + +# Count Rows +db.posts.find().count() +db.posts.find({ category: 'news' }).count() + + +# Limit Rows +db.posts.find().limit(2).pretty() + + +# Chaining +db.posts.find().limit(2).sort({ title: 1 }).pretty() + + +# Foreach +db.posts.find().forEach(function(doc) { + print("Blog Post: " + doc.title) +}) + + +# Increment Field (\$inc) +db.posts.update({ title: 'Post Two' }, +{ + $inc: { + likes: 5 + } +}) + + +# Rename Field +db.posts.update({ title: 'Post Two' }, +{ + $rename: { + likes: 'views' + } +}) + + +# Sub-Documents +db.posts.update({ title: 'Post One' }, +{ + $set: { + comments: [ + { + body: 'Comment One', + user: 'Mary Williams', + date: Date() + }, + { + body: 'Comment Two', + user: 'Harry White', + date: Date() + } + ] + } +}) + + +# Find By Element in Array (\$elemMatch) +db.posts.find({ + comments: { + $elemMatch: { + user: 'Mary Williams' + } + } + } +) + + +# Add Index +db.posts.createIndex({ title: 1 }) + + +# Drop Index +db.posts.dropIndex("title_1") + + +# Hide/Unhide Indexes +db.posts.hideIndex("title_1") +db.posts.unhideIndex("title_1") + + +# Text Search +db.posts.find({ + $text: { + $search: "\"Post O\"" + } +}) + + +# Greater & Less Than +db.posts.find({ views: { $gt: 2 } }) +db.posts.find({ views: { $gte: 7 } }) +db.posts.find({ views: { $lt: 7 } }) +db.posts.find({ views: { $lte: 7 } })