Return a unicode object with the MATCH representation of this expression.

def to_match(self):
        """Return a unicode object with the MATCH representation of this expression."""
        self.validate()

        mark_name, field_name = self.fold_scope_location.get_location_name()
        validate_safe_string(mark_name)

        template = u'$%(mark_name)s.%(field_name)s'
        template_data = {
            'mark_name': mark_name,
        }

        if field_name == COUNT_META_FIELD_NAME:
            template_data['field_name'] = 'size()'
        else:
            inner_type = strip_non_null_from_type(self.field_type.of_type)
            if GraphQLDate.is_same_type(inner_type):
                # Known OrientDB bug may cause trouble here, and incorrect data may be returned:
                # https://github.com/orientechnologies/orientdb/issues/7289
                template += '.format("' + STANDARD_DATE_FORMAT + '")'
            elif GraphQLDateTime.is_same_type(inner_type):
                # Known OrientDB bug may cause trouble here, and incorrect data may be returned:
                # https://github.com/orientechnologies/orientdb/issues/7289
                template += '.format("' + STANDARD_DATETIME_FORMAT + '")'

            template_data['field_name'] = field_name

        return template % template_data