MongoDB Cheat Sheet
Tags: mongodb
Published: 2020-12-27 02:37:13

# MongoDB Cheat Sheet 

## Open MongoDB in cmd (For windows)
```
mongo
```

> If `mongo` is not recognized as an internal or external command, operable program or batch file, then do the followings from [this blog](https://dangphongvanthanh.wordpress.com/2017/06/12/add-mongos-bin-folder-to-the-path-environment-variable/)

## Show All Databases

```
show dbs
```

## Show Current Database

```
db
```

## Create Or Switch Database

```
use acme
```

## Drop Database🔴

```
> use mydb
> db.dropDatabase()
```

## Create Collection

```
db.createCollection('posts')
```

## Show Collections

```
show collections
```

## Drop Collection 🔴

```
> use mydb
> db.usersCollection.drop()
```

## 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 from a collection 

```
db.posts.find()
```

## Get All Rows from a collection Formatted

```
db.posts.find().pretty()
```

## Find Rows

```
db.posts.find({ category: 'News' })
```

## Sort Rows in a collection

```
# asc
db.posts.find().sort({ title: 1 }).pretty()
# desc
db.posts.find().sort({ title: -1 }).pretty()
```

## Count Rows in a collection

```
db.posts.find().count()
db.posts.find({ category: 'news' }).count()
```

## Limit Rows in a collection

```
db.posts.find().limit(2).pretty()
```

## Chaining example

```
db.posts.find().limit(2).sort({ title: 1 }).pretty()
```

## Foreach

```
db.posts.find().forEach(function(doc) {
  print("Blog Post: " + doc.title)
})
```

## Find One Row

```
db.posts.findOne({ 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'
  }
})
```

## Increment Field (\$inc)

```
db.posts.update({ title: 'Post Two' },
{
  $inc: {
    likes: 5
  }
})
```

## Rename Field

```
db.posts.update({ title: 'Post Two' },
{
  $rename: {
    likes: 'views'
  }
})
```

## Delete specific document from a collection

```
db.posts.remove({ title: 'Post Four' })
```

## 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: 'text' })
```

## 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 } })
```

## Get database size and index size in MB (Megabytes)

```
db.stats(1024*1024);
```

## Export a collection in json format

```
mongoexport --db newdb -c usersCollection --out testBakcup.json
```

## Import a collection from json file
```
mongoimport --db newdb -c usersCollectiontwo --file test.json
```

## Export entire database including all collections (Local)
```
mongodump --db newdb
```

## Export entire database including all collections (Cluster)
```
mongodump --uri="mongodb+srv://<Name>:<Password>@cluster0-pk6qf.mongodb.net/<DB_YOU_WANT_TO_EXPORT>?retryWrites=true&w=majority"
```
[ref1](https://docs.mongodb.com/database-tools/mongodump/#connect-to-a-mongodb-instance)

> use `--collection <collection_name>` for only specific collection

## Import entire database including all collections
```
mongorestore --db deleteme dump/newdb
```
> **newdb** is the folder name that holds the database (deleteme) related files (.bson) etc.
> To override same document with `_id` use [this](https://stackoverflow.com/a/32575607/11609006) method

## Connect to cloud mongodb cluster from mongo shell
```
mongo "mongodb+srv://cluster0.g1re8.mongodb.net/<dbname>" --username <check_mongo_cloud_connect_shell>
```

## Useful resources
- MongoDB Package Components (e.g. mongoimport, mongoexport, mongodump  ) 
> https://docs.mongodb.com/manual/reference/program

**Posted in**  •  [dev.to](https://dev.to/kamalhossain/mongodb-cheat-sheet-1p99) • [gist.github.com](https://gist.github.com/kamal-hossain/20845cd86c9e5dfe8528424c6f43072e)