         let document = try firstDocument(in: try execute(command: command))
         
         guard document["ok"].int32 == 1 else {
-            throw MongoError.CommandFailure
-        }
-    }
-    
-    /// Copies this database and collections to another name
-    /// - parameter to: The new database name
-    /// - parameter as: The optional user credentials that you'll use to authenticate in the new DB
+            throw MongoError.CommandFailure // TODO: Make this more specific
+        }
+    }
+    
+    /// Copies this `Database` and `Collection`s to another `Database`
+    ///
+    /// - parameter database: The new database name
+    /// - parameter user: The optional user credentials that you'll use to authenticate in the new DB
+    ///
+    /// - throws: When we can't send the request/receive the response, you don't have sufficient permissions or an error occurred
     public func copy(to database: String, as user: (user: String, nonce: String, password: String)? = nil) throws {
         try server.copy(database: self.name, to: database, as: user)
     }
     
     /// Clones collection in the namespace from a server to this database
     /// Optionally filters data you don't want
+    ///
+    /// For additional information: https://docs.mongodb.com/manual/reference/command/cloneCollection/#dbcmd.cloneCollection
+    ///
     /// - parameter namespace: The remote namespace
-    /// - parameter from: The server URI you're copying from
-    /// - parameter filtering: The query you're using to filter this
+    /// - parameter server: The server URI you're copying from
+    /// - parameter filter: The query you're using to filter this
+    ///
+    /// - throws: When we can't send the request/receive the response, you don't have sufficient permissions or an error occurred
     public func clone(namespace: String, from server: String, filtering filter: Query? = nil) throws {
         var command: Document = [
                                     "cloneCollection": ~namespace,

    /// command, this method is used primarily for creating new collections that use specific
    /// options. For example, you use `createCollection()` to create a capped collection, or to
    /// create a new collection that uses document validation. `createCollection()` is also used to
    /// pre-allocate space for an ordinary collection.
    ///
    /// DbCommand reference: https://docs.mongodb.com/manual/reference/command/create/
    ///
    /// - parameter name: The name of the collection to create.
    /// - parameter options: Optionally, configuration options for creating this collection.
    ///   See https://docs.mongodb.com/manual/reference/method/db.createCollection/ for a list of valid options.
    public func createCollection(_ name: String, options: Document? = nil) throws {
        var command: Document = ["create": ~name]
        

    }
    
    /// Respond to a challenge
    ///
    /// - parameter details: The authentication details
    /// - parameter previousInformation: The nonce, response and `SCRAMClient` instance
    ///
    /// - throws: When the authentication fails, when Base64 fails
    private func challenge(with details: (username: String, password: String, against: String), using previousInformation: (nonce: String, response: Document, scram: SCRAMClient<SHA1>)) throws {
        // If we failed the authentication
        guard previousInformation.response["ok"].int32 == 1 else {
