// db.js if ( typeof DB == "undefined" ){ DB = function( mongo , name ){ this._mongo = mongo; this._name = name; } } DB.prototype.getMongo = function(){ assert( this._mongo , "why no mongo!" ); return this._mongo; } DB.prototype.getName = function(){ return this._name; } DB.prototype.getCollection = function( name ){ return new DBCollection( this._mongo , this , name , this._name + "." + name ); } DB.prototype.runCommand = function( obj ){ if ( typeof( obj ) == "string" ){ var n = {}; n[obj] = 1; obj = n; } return this.getCollection( "$cmd" ).findOne( obj ); } DB.prototype._dbCommand = DB.prototype.runCommand; DB.prototype.addUser = function( username , pass ){ var c = this.getCollection( "system.users" ); var u = c.findOne( { user : username } ) || { user : username }; u.pwd = hex_md5( "mongo" + pass ); print( tojson( u ) ); c.save( u ); } DB.prototype.auth = function( username , pass ){ var n = this.runCommand( { getnonce : 1 } ); var a = this.runCommand( { authenticate : 1 , user : username , nonce : n.nonce , key : hex_md5( n.nonce + username + hex_md5( "mongo" + pass ) ) } ); return a.ok; } /** Create a new collection in the database. Normally, collection creation is automatic. You would use this function if you wish to specify special options on creation. If the collection already exists, no action occurs.

Options:

Example:

db.createCollection("movies", { size: 10 * 1024 * 1024, capped:true } ); * @param {String} name Name of new collection to create * @param {Object} options Object with options for call. Options are listed above. * @return SOMETHING_FIXME */ DB.prototype.createCollection = function(name, opt) { var options = opt || {}; var cmd = { create: name, capped: options.capped, size: options.size, max: options.max }; var res = this._dbCommand(cmd); return res; } /** * Returns the current profiling level of this database * @return SOMETHING_FIXME or null on error */ DB.prototype.getProfilingLevel = function() { var res = this._dbCommand( { profile: -1 } ); return res ? res.was : null; } /** Erase the entire database. (!) * @return Object returned has member ok set to true if operation succeeds, false otherwise. */ DB.prototype.dropDatabase = function() { return this._dbCommand( { dropDatabase: 1 } ); } DB.prototype.help = function() { print("DB methods:"); print("\tdb.auth(username, password)"); print("\tdb.getMongo() get the server connection object"); print("\tdb.getName()"); print("\tdb.getCollection(cname) same as db['cname'] or db.cname"); print("\tdb.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into { cmdObj : 1 }"); print("\tdb.addUser(username, password)"); print("\tdb.createCollection(name, { size : ..., capped : ..., max : ... } )"); print("\tdb.getProfilingLevel()"); print("\tdb.setProfilingLevel(level) 0=off 1=slow 2=all"); print("\tdb.eval(func, args) run code server-side"); print("\tdb.getLastError()"); print("\tdb.getPrevError()"); print("\tdb.resetError()"); print("\tdb.getCollectionNames()"); print("\tdb.group(ns, key[, keyf], cond, reduce, initial)"); } /** *

Set profiling level for your db. Profiling gathers stats on query performance.

* *

Default is off, and resets to off on a database restart -- so if you want it on, * turn it on periodically.

* *

Levels :

*