Today will see some tips and interesting stuffs with mongo shell. The shell is not only the means to access the mongo database (mongod) but also is a javascript editor.
You can perform various javascript operation. For e.g. you can perform arithmetic operation:
> var i = 10;
> i
10
> var j = 1;
> j
1
> var k = i + j;
> k
11
>
The scope of the variable i,j and k will be valid until you close this shell.
Connecting to a specific db
Generally if you open the shell without any argument, by default it connects to the mongod process running in the same system (localhost) at port 27017. Now if you want to connect to the mongo shell to mongod process running in a different host and to a db called foo, you will use the following:
> mongo myhost:30000/foo
MongoDB shell version: 2.4.0
connecting to: myhost:30000/foo
>
The above example connects to a db foo running in a host myhost at port 30000.
Opening mongo shell without connecting to a specific db
There is one more magic. You can open the mongo shell and work with it without even connecting to any database (i.e. mongod). For the same, type the following:
mongo --nodb
MongoDB shell version: 2.4.9
>
After opening the shell you can connect to the specific mongod process at your convenience:
> conn = new Mongo("localhost:27017")
connection to localhost:27017
>
Please note at this point you have just connected to a mongod process but not a db yet. If you type db you will get the following error:
> db
Tue Mar 25 16:00:41.997 ReferenceError: db is not defined
>
to connect to a db, do the following:
> db = conn.getDB("test")
test
> db
test
>
Now your db variable is defined and is valid till the time the shell is open. To connect to different db you can use the same conn variable or else the "use <db>" command (as discussed in previous posts).
Tips for Using the Shell
Because mongo is simply a JavaScript shell, you can get a great deal of help for it by simply looking up JavaScript documentation online. For MongoDB-specific functionality, the shell includes built-in help that can be accessed by typing help:
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
>
Database-level help is provided by db.help() and collection-level help by
db.foo.help(). A good way of figuring out what a function is doing is to type it without the parentheses. This will print the JavaScript source code for the function. For example, if we are curious about how the update function works or cannot remember the order of parameters, we can do the following:
> db.foo.update
function ( query , obj , upsert , multi ){
assert( query , "need a query" );
assert( obj , "need an object" );
var firstKey = null;
for (var k in obj) { firstKey = k; break; }
if (firstKey != null && firstKey[0] == '$') {
// for mods we only validate partially, for example keys may have dots
this._validateObject( obj );
} else {
// we're basically inserting a brand new object, do full validation
this._validateForStorage( obj );
}
// can pass options via object for improved readability
if ( typeof(upsert) === 'object' ) {
assert( multi === undefined, "Fourth argument must be empty when specifying upsert and multi with an object." );
opts = upsert;
multi = opts.multi;
upsert = opts.upsert;
}
var startTime = (typeof(_verboseShell) === 'undefined' ||
!_verboseShell) ? 0 : new Date().getTime();
this._mongo.update( this._fullName , query , obj , upsert ? true : false , multi ? true : false );
this._printExtraInfo("Updated", startTime);
}
>
Majic!!!!!!!!!!!!
We can load and run custom javascripts as well in the shell. In the next post we will see how.
<< Prev Next >>
You can perform various javascript operation. For e.g. you can perform arithmetic operation:
> var i = 10;
> i
10
> var j = 1;
> j
1
> var k = i + j;
> k
11
>
The scope of the variable i,j and k will be valid until you close this shell.
Connecting to a specific db
Generally if you open the shell without any argument, by default it connects to the mongod process running in the same system (localhost) at port 27017. Now if you want to connect to the mongo shell to mongod process running in a different host and to a db called foo, you will use the following:
> mongo myhost:30000/foo
MongoDB shell version: 2.4.0
connecting to: myhost:30000/foo
>
The above example connects to a db foo running in a host myhost at port 30000.
Opening mongo shell without connecting to a specific db
There is one more magic. You can open the mongo shell and work with it without even connecting to any database (i.e. mongod). For the same, type the following:
mongo --nodb
MongoDB shell version: 2.4.9
>
After opening the shell you can connect to the specific mongod process at your convenience:
> conn = new Mongo("localhost:27017")
connection to localhost:27017
>
Please note at this point you have just connected to a mongod process but not a db yet. If you type db you will get the following error:
> db
Tue Mar 25 16:00:41.997 ReferenceError: db is not defined
>
to connect to a db, do the following:
> db = conn.getDB("test")
test
> db
test
>
Now your db variable is defined and is valid till the time the shell is open. To connect to different db you can use the same conn variable or else the "use <db>" command (as discussed in previous posts).
Tips for Using the Shell
Because mongo is simply a JavaScript shell, you can get a great deal of help for it by simply looking up JavaScript documentation online. For MongoDB-specific functionality, the shell includes built-in help that can be accessed by typing help:
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
>
Database-level help is provided by db.help() and collection-level help by
db.foo.help(). A good way of figuring out what a function is doing is to type it without the parentheses. This will print the JavaScript source code for the function. For example, if we are curious about how the update function works or cannot remember the order of parameters, we can do the following:
> db.foo.update
function ( query , obj , upsert , multi ){
assert( query , "need a query" );
assert( obj , "need an object" );
var firstKey = null;
for (var k in obj) { firstKey = k; break; }
if (firstKey != null && firstKey[0] == '$') {
// for mods we only validate partially, for example keys may have dots
this._validateObject( obj );
} else {
// we're basically inserting a brand new object, do full validation
this._validateForStorage( obj );
}
// can pass options via object for improved readability
if ( typeof(upsert) === 'object' ) {
assert( multi === undefined, "Fourth argument must be empty when specifying upsert and multi with an object." );
opts = upsert;
multi = opts.multi;
upsert = opts.upsert;
}
var startTime = (typeof(_verboseShell) === 'undefined' ||
!_verboseShell) ? 0 : new Date().getTime();
this._mongo.update( this._fullName , query , obj , upsert ? true : false , multi ? true : false );
this._printExtraInfo("Updated", startTime);
}
>
Majic!!!!!!!!!!!!
We can load and run custom javascripts as well in the shell. In the next post we will see how.
<< Prev Next >>