         }.decode(UpdateReply.self)
     }
     
-    public func updateMany(where query: Document, setting: Document?, unsetting: Document?) -> EventLoopFuture<UpdateReply> {
+    public func updateMany<Query: MongoKittenQuery>(
+        where query: Query,
+        to document: Document
+    ) -> EventLoopFuture<UpdateReply> {
+        return updateMany(
+            where: query.makeDocument(),
+            to: document
+        )
+    }
+    
+    public func updateMany(
+        where query: Document,
+        setting: Document?,
+        unsetting: Document?
+    ) -> EventLoopFuture<UpdateReply> {
         return pool.next(for: .basic).flatMap { connection in
             var request = UpdateCommand.UpdateRequest(where: query, setting: setting, unsetting: unsetting)
             request.multi = true

import MongoCore

extension MongoCollection {
    public func updateOne(where query: Document, to document: Document) -> EventLoopFuture<UpdateReply> {
        return pool.next(for: .basic).flatMap { connection in
            let request = UpdateCommand.UpdateRequest(where: query, to: document)
            let command = UpdateCommand(updates: [request], inCollection: self.name)

        }.decode(UpdateReply.self)
    }
    
    public func updateOne<Query: MongoKittenQuery>(
        where query: Query,
        to document: Document
    ) -> EventLoopFuture<UpdateReply> {
        return updateOne(
            where: query.makeDocument(),
            to: document
        )
    }
    
    public func updateMany(
        where query: Document,
        to document: Document
    ) -> EventLoopFuture<UpdateReply> {
        return pool.next(for: .basic).flatMap { connection in
            var request = UpdateCommand.UpdateRequest(where: query, to: document)
            request.multi = true
