1 /** 2 MongoDatabase class representing common database for group of collections. 3 4 Technically it is very special collection with common query functions 5 disabled and some service commands provided. 6 7 Copyright: © 2012-2014 RejectedSoftware e.K. 8 License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. 9 Authors: Sönke Ludwig 10 */ 11 module vibe.db.mongo.database; 12 13 import vibe.db.mongo.client; 14 import vibe.db.mongo.collection; 15 import vibe.data.bson; 16 17 18 /** Represents a single database accessible through a given MongoClient. 19 */ 20 struct MongoDatabase 21 { 22 @safe: 23 24 private { 25 string m_name; 26 string m_commandCollection; 27 MongoClient m_client; 28 } 29 30 //@disable this(); 31 32 this(MongoClient client, string name) 33 { 34 import std.algorithm; 35 36 assert(client !is null); 37 m_client = client; 38 39 assert( 40 !canFind(name, '.'), 41 "Compound collection path provided to MongoDatabase constructor instead of single database name" 42 ); 43 m_name = name; 44 m_commandCollection = m_name ~ ".$cmd"; 45 } 46 47 /// The name of this database 48 @property string name() 49 { 50 return m_name; 51 } 52 53 /// The client which represents the connection to the database server 54 @property MongoClient client() 55 { 56 return m_client; 57 } 58 59 /** Accesses the collections of this database. 60 61 Returns: The collection with the given name 62 */ 63 MongoCollection opIndex(string name) 64 { 65 return MongoCollection(this, name); 66 } 67 68 /** Retrieves the last error code (if any) from the database server. 69 70 Exact object format is not documented. MongoErrorDescription signature will be 71 updated upon any issues. Note that this method will execute a query to service 72 collection and thus is far from being "free". 73 74 Returns: struct storing data from MongoDB db.getLastErrorObj() object 75 */ 76 MongoErrorDescription getLastError() 77 { 78 return m_client.lockConnection().getLastError(m_name); 79 } 80 81 /** Returns recent log messages for this database from the database server. 82 83 See $(LINK http://www.mongodb.org/display/DOCS/getLog+Command). 84 85 Params: 86 mask = "global" or "rs" or "startupWarnings". Refer to official MongoDB docs. 87 88 Returns: Bson document with recent log messages from MongoDB service. 89 */ 90 Bson getLog(string mask) 91 { 92 static struct CMD { 93 string getLog; 94 } 95 CMD cmd; 96 cmd.getLog = mask; 97 return runCommand(cmd); 98 } 99 100 /** Performs a filesystem/disk sync of the database on the server. 101 102 See $(LINK http://www.mongodb.org/display/DOCS/fsync+Command) 103 104 Returns: check documentation 105 */ 106 Bson fsync(bool async = false) 107 { 108 static struct CMD { 109 int fsync = 1; 110 bool async; 111 } 112 CMD cmd; 113 cmd.async = async; 114 return runCommand(cmd); 115 } 116 117 118 /** Generic means to run commands on the database. 119 120 See $(LINK http://www.mongodb.org/display/DOCS/Commands) for a list 121 of possible values for command_and_options. 122 123 Params: 124 command_and_options = Bson object containing the command to be executed 125 as well as the command parameters as fields 126 127 Returns: The raw response of the MongoDB server 128 */ 129 Bson runCommand(T)(T command_and_options) 130 { 131 return m_client.getCollection(m_commandCollection).findOne(command_and_options); 132 } 133 }