Database
February 8, 2012 ยท View on GitHub
The first thing to do in order to make queries to the database is to open one. This can be done with the Db constructor.
var mongodb = require("mongodb"),
mongoserver = new mongodb.Server(host, port, server_options),
db_connector = new mongodb.Db(name, mongoserver, db_options);
db_connector.open(callback);
hostis a server hostname or IPportis a MongoDB port, usemongodb.Connection.DEFAULT_PORTfor default (27017)server_optionssee Server optionsnameis the databse name that needs to be opened, database will be created automatically if it doesn't yet existdb_optionssee DB options
Server options
Several options can be passed to the Server constructor with options parameter.
auto_reconnect- to reconnect automatically,default:falsepoolSize- specify the number of connections in the pooldefault:1socketOptions- a collection of pr socket settings
Socket options
Several options can be set for the socketOptions.
timeout= set seconds before connection times outdefault:0noDelay= Disables the Nagle algorithmdefault:truekeepAlive= Set if keepAlive is useddefault:0, which means no keepAlive, set higher than 0 for keepAliveencoding= 'ascii'|'utf8'|'base64'default:null
DB options
Several options can be passed to the Db constructor with options parameter.
native_parser- if true, use native BSON parserstrict- sets strict mode, if true then existing collections can't be "recreated" etc.pk- custom primary key factory to generate_idvalues (see Custom primary keys).forceServerObjectId- generation of objectid is delegated to the mongodb server instead of the driver. default is falseretryMiliSeconds- specify the number of milliseconds between connection attemptsdefault:5000numberOfRetries- specify the number of retries for connection attemptsdefault:3reaper- enable/disable reaper (true/false)default:falsereaperInterval- specify the number of milliseconds between each reaper attemptdefault:10000reaperTimeout- specify the number of milliseconds for timing out callbacks that don't returndefault:30000raw- driver expects Buffer raw bson document,default:false
Opening a database
Database can be opened with Db method open.
db_connector.open(callback);
callback is a callback function which gets 2 parameters - an error object (or null, if no errors occured) and a database object.
Resulting database object can be used for creating and selecting collections.
db_connector.open(function(err, db){
db.collection(...);
});
Database properties
databaseNameis the name of the databaseserverConfigincludes information about the server (serverConfig.host,serverConfig.portetc.)stateindicates if the database is connected or notstrictindicates if strict mode is on (true) or off (false, default)versionindicates the version of the MongoDB database
Database events
closeto indicate that the connection to the database was closed
For example
db.on("close", function(error){
console.log("Connection to the database was closed!");
});
NB! If auto_reconnect was set to true when creating the server, then the connection will be automatically reopened on next database operation. Nevertheless the close event will be fired.
Sharing the connections over multiple dbs
To share the connection pool across multiple databases you database instance has method db
db_connector.db(name)
this returns a new db instance that shares the connections off the previous instance but will send all commands to the database name. This allows for better control of resource usage in a multiple database scenario.
Deleting a database
To delete a database you need a pointer to it first. Deletion can be done with method dropDatabase.
db_connector.open(function(err, db){
db.dropDatabase()
});
Custom primary keys
Every record in the database has an unique primary key called _id. Default primary keys are 12 byte hashes but a custom key generator can be used for something else. If you set _id "by hand" when inserting records then you can use whatever you want, primary key factory generates _id values only for records without ones.
Example 1: No need to generate primary key, as its already defined:
collection.insert({name:"Daniel", _id:"12345"});
Example 2: No primary key, so it needs to be generated before save:
collectionn.insert({name:"Daniel"});
Custom primary key factory is actually an object with method createPK which returns a primary key. The context (value for this) for createPK is left untouched.
var CustomPKFactory = {
counter:0,
createPk: function() {
return ++this.counter;
}
}
db_connector = new mongodb.Db(name, mongoserver, {pk: CustomPKFactory});