<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find(self, query, orderby=None, order_by_direction=1, page=0, limit=0):
 """Find a document by any criteria :param dict query: The query to perform :param str orderby: The attribute to order results by :param int order_by_direction: 1 or -1 :param int page: The page to return :param int limit: Number of results per page :returns: A list of results :rtype: list """


        cursor = self.collection.find(query)

        if orderby:
            cursor.sort(orderby, order_by_direction)

        cursor.skip(page*limit).limit(limit)

        results = []
        while (yield cursor.fetch_next):
            results.append(self._obj_cursor_to_dictionary(cursor.next_object()))

        raise Return(results)