mongosh
[!NOTE|label:references:]
install
[!NOTE|label:references:]
- universal - $ version='mongosh-2.2.15-linux-arm64' $ curl -fsSL https://downloads.mongodb.com/compass/${version}.tgz | tar xzf - -C /opt/mongosh # setup PATH $ echo "export PATH=\$PATH:/opt/mongosh/${version}/bin" >> ~/.bashrc $ source ~/.bashrc # or link binary into PATH $ sudo cp /opt/mongosh/${version}/bin/mongosh_crypt_v1.dylib /usr/local/lib/ $ sudo ln -s /opt/mongosh/${version}/bin/mongosh /usr/local/bin/mongosh
- debain - $ sudo apt-get install gnupg $ wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | sudo tee /etc/apt/trusted.gpg.d/server-7.0.asc # ubuntu 18.04 $ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list # ubuntu 20.04 $ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list # ubuntu 22.04 $ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list # install $ sudo apt-get update $ sudo apt-get install -y mongodb-mongosh # or openssl 1.1 $ sudo apt-get install -y mongodb-mongosh-shared-openssl11 # or openssl 3.0 $ sudo apt-get install -y mongodb-mongosh-shared-openssl3
- centos - $ sudo bash -c "cat > /etc/yum.repos.d/mongodb-org-7.0.repo" <<EOF [mongodb-org-7.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc EOF # install $ sudo yum install -y mongodb-mongosh # or openssl 1.1 $ sudo yum install -y mongodb-mongosh-shared-openssl11 # or openssl 3.0 $ sudo yum install -y mongodb-mongosh-shared-openssl3 # or RHEL8 $ sudo yum install -y https://repo.mongodb.org/yum/redhat/8/mongodb-org/7.0/x86_64/RPMS/mongodb-mongosh-7.0.0-1.el8.x86_64.rpm
- check info - $ mongosh --build-info
configure
[!NOTE|label:references:]
- Configure mongosh
- Configure Settings Using a Configuration File
- windows:
mongosh.cfgsame directory asmongosh.exe- osx:
/usr/local/etc/mongosh.conf
/opt/homebrew/etc/mongosh.conf
/etc/mongosh.conf- linux:
/etc/mongosh.conf- Execute Code From a Configuration File
- Configure Settings
# ubuntu 22.04
$ cat /etc/mongosh.conf
mongosh:
  displayBatchSize: 3000
config.set
[!NOTE|label:references:]
db_name> DBQuery.shellBatchSize = 300
# verify
db_name> config.get('displayBatchSize')
300
db_name> config.set("displayBatchSize", 3000)
Setting "displayBatchSize" has been changed
db_name> config.get('displayBatchSize')
3000
db_name> config.get('inspectDepth')
6
$ cat ~/.mongodb/mongosh/config | jq -r .displayBatchSize
3000
# or via cmd
$ mongosh --eval 'DBQuery.shellBatchSize = 2000; db...'
Customize the mongosh Prompt
auto-completion
$ npm i -g @mongosh/autocomplete
local files
[!NOTE|label:references:]
- logs - | OPERATING SYSTEM | PATH | | ----------------- | ----------------------------------------------------- | | macOS | - ~/.mongodb/mongosh/<LogID>_log| | Linux |- ~/.mongodb/mongosh/<LogID>_log| | Windows |- %LOCALAPPDATA%/mongodb/mongosh/<LogID>_log|- > Get-Content %LOCALAPPDATA%/mongodb/mongosh/<LogID>_log
- command-line history - | OPERATING SYSTEM | PATH | |------------------|-------------------------------------------------------| | macOS | - ~/.mongodb/mongosh/mongosh_repl_history| | Linux |- ~/.mongodb/mongosh/mongosh_repl_history| | Windows |- %UserProfile%/.mongodb/mongosh/mongosh_repl_history|
--eval
execute command
- list all - _id- $ mongosh "mongodb://mongodb.domain.com:27017" \ --username username \ --password $(pass show path/to/credential) \ --authenticationDatabase db_name \ --eval 'use db_name' \ --eval 'db.collection.distinct("_id")' | # or $ mongosh "mongodb://mongodb.domain.com:27017" \ --username username \ --password $(pass show path/to/credential) \ --authenticationDatabase db_name \ --eval "db = db.getSiblingDB('db_name'); db.collection.distinct('_id')" | tr "'" '"'
eval command and show as json format
$ mongosh "mongodb://mongodb.domain.com:27017" \
          --username username \
          --password $(pass show path/to/credential) \
          --authenticationDatabase db_name \
          --json=relaxed \
          --eval 'use db_name' \
          --eval 'printjson(db.collection.distinct("_id"))'
# or
$ mongosh "mongodb://mongodb.domain.com:27017" \
          --username username \
          --password $(pass show path/to/credential) \
          --authenticationDatabase db_name \
          --eval "db = db.getSiblingDB('db_name'); printjson(db.collection.distinct('_id'))" |
  tr "'" '"'
interactive mode
[!NOTE|label:references:]
connect to remote server
[!NOTE|label:references:]
# login
$ mongosh --host mongodb.domain.com \
          --port 27017 \
          --username 'username' \
          --password $(pass show path/to/credential) \
          --authenticationDatabase 'db_name'
# or
$ mongosh 'mongodb://mongodb.domain.com:27017' \
          --username 'username' \
          --password $(pass show path/to/credential) \
          --authenticationDatabase 'db_name'
Current Mongosh Log ID: 66b5a880d70a325006838725
Connecting to:          mongodb://<credentials>@mongodb.domain.com:27017/?directConnection=true&authSource=db_name&appName=mongosh+2.2.15
Using MongoDB:          6.0.2
Using Mongosh:          2.2.15
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
test>
# use database
test> use db_name
switched to db db_name
db_name> db.hello()
{
  isWritablePrimary: true,
  topologyVersion: {
    processId: ObjectId('6616e407a0520bbbc6dbeace'),
    counter: Long('0')
  },
  maxBsonObjectSize: 16777216,
  maxMessageSizeBytes: 48000000,
  maxWriteBatchSize: 100000,
  localTime: ISODate('2024-08-09T05:52:20.150Z'),
  logicalSessionTimeoutMinutes: 30,
  connectionId: 235951,
  minWireVersion: 0,
  maxWireVersion: 17,
  readOnly: false,
  ok: 1
}
utility
[!NOTE|label:references:]
db_name> help
db_name> db.collection.help()
# show dbs
test> show dbs
# get current db name
db_name> db.collection.getDB()
db_name
# get current collection name
db_name> db.collection.getName()
collection
# get stat of collection
db_name> db.collection.stats()
- 
[!NOTE|label:references:] db_name> db = db.getSiblingDB('db_name')
show all tables
[!NOTE|label:references:]
db_name> db.getCollectionNames()
# or
db_name> show tables
# or
db_name> show collections
- fileter tablesdb_name> db.getCollectionNames().filter( function(CollectionName) { return /klocwork/.test(CollectionName) }) [ 'klocwork', 'klocwork_new' ]
list data
[!NOET|label:references:]
- find the first data in table/collection - db_name> db.collection.findOne()
- list all data in table/collection - db_name> printjson( db.getCollection('jobs').find().toArray() ) # or db_name> db.collection.find().pretty() # or db_name> db.collection.find().toArray()
- get count - db_name> db.collection.countDocuments() 19 # or db_name> db.collection.estimatedDocumentCount() 19
- data size - db_name> db.collection.dataSize() 5068
query
[!NOTE|label:references:]
- find data by - _id- db_name> db.collection.distinct('_id') [ ObjectId('6544a0a06bdbf57e9914b1cd'), ObjectId('6544a3a5ba2f29b94c8eb4b1'), ObjectId('65450b1a715f2a7eb0c95658') ] # or db_name> db.collection.find({},{_id:1}) [ { _id: ObjectId('6544a0a06bdbf57e9914b1cd') }, { _id: ObjectId('6544a3a5ba2f29b94c8eb4b1') }, { _id: ObjectId('65450b1a715f2a7eb0c95658') } ] # or db_name> db.collection.find( {}, {_id:1} ).map( function(item){ return item._id; } ) # or db_name> db.collection.find( {}, {_id:1} ).map( x => x._id ) # or: https://stackoverflow.com/a/28389836/2940319 db_name> db.runCommand ( { distinct: "collection", key: "_id" } ) # or db_name> var arr=[] db_name> db.collection.find( {},{_id:1} ).forEach( function(doc){arr.push(doc._id)} ) db_name> printjson( arr )
- list 2 columns - db_name> db.collection.find({},{_id:1, timestamp:1}).pretty() # or db_name> db.collection.find({},{_id:1, timestamp:1}).toArray() # or db_name> printjson(db.collection.find({}, {_id:1, user:2}))
- query fiels in conditions - [!NOTE|label:references:] - db_name> db.collection.find({user: 'Marslo Jiao'}, {_id:1, timestamp:2}).pretty() [ { _id: ObjectId('66a14d301ce9a4bb04e8c2e1'), timestamp: '2024-07-24 11:51:28 PDT' }, { _id: ObjectId('66a161038305d663fb9f6f0f'), timestamp: '2024-07-24 13:16:03 PDT' } ] # or db_name> db.collection.find({user: 'Marslo Jiao'}, {_id:1, timestamp:2}).toArray() [ { _id: ObjectId('66a14d301ce9a4bb04e8c2e1'), timestamp: '2024-07-24 11:51:28 PDT' }, { _id: ObjectId('66a161038305d663fb9f6f0f'), timestamp: '2024-07-24 13:16:03 PDT' } ]
- query in multiple values - db_name> db.log_dashboard_docker.find( {'user': {$in: ['Marslo Jiao', 'John Doe']}}, {_id:1, timestamp:2} )
get key name
[!NOTE|label:references:]
db_name> var arr=[]
db_name> db.collection.find().forEach(function(doc){Object.keys(doc).forEach(function(key){arr[key]=1})})
db_name> arr
[
  _id: 1,
  user: 1,
  update_details: 1,
  timestamp: 1
]
# or
db_name> doc = db.collection.findOne();
db_name> for ( key in doc ) print( key )
_id
user
update_details
timestamp
operation
comparison operators
[!NOTE|label:references:]
| OPERATOR | DESCRIPTION | 
|---|---|
| $eq | equal (=) | 
| $gt | greater than > | 
| $gte | greater or equal than (>=) | 
| $in | in (in) | 
| $lt | less than (<) | 
| $lte | less or equal than (<=) | 
| $ne | not equal () | 
| $nin | not in (not in ) |