Update an existing document via a $set query, this will apply only these attributes.

        :param predicate_value: The value of the predicate
        :param dict attrs: The dictionary to apply to this object
        :param str predicate_attribute: The attribute to query for to find the object to set this data ond
        :returns: JSON Mongo client response including the "n" key to show number of objects effected
        t

def patch(self, predicate_value, attrs, predicate_attribute="_id"):
        """Update an existing document via a $set query, this will apply only these attributes.

        :param predicate_value: The value of the predicate
        :param dict attrs: The dictionary to apply to this object
        :param str predicate_attribute: The attribute to query for to find the object to set this data ond
        :returns: JSON Mongo client response including the "n" key to show number of objects effected
        t"""

        if predicate_attribute=="_id" and not isinstance(predicate_value, ObjectId):
            predicate_value = ObjectId(predicate_value)

        predicate = {predicate_attribute: predicate_value}

        dct = self._dictionary_to_cursor(attrs)

        if dct.get("_id"):
            del dct["_id"]

        set = { "$set": dct }

        mongo_response = yield self.collection.update(predicate, set, False)

        raise Return(self._obj_cursor_to_dictionary(mongo_response))