Searches an array for an occurence of a specified value and returns the array index of the first occurence.
    See https://docs.mongodb.com/manual/reference/operator/aggregation/zip/
    for more details
    :param string_expression: Any valid expression as long as it resolves to an array.
    :param substring_expression: Can be any valid expression.
    :param start: A number that can be represented as integers that specifies the starting index position for the search.
    :param end: A number that can be represented as integers that specifies the ending index position for the search.
    :return: Aggregation operator

def INDEX_OF_ARRAY(string_expression, substring_expression, start=None, end=None):
    """
    Searches an array for an occurence of a specified value and returns the array index of the first occurence.
    See https://docs.mongodb.com/manual/reference/operator/aggregation/zip/
    for more details
    :param string_expression: Any valid expression as long as it resolves to an array.
    :param substring_expression: Can be any valid expression.
    :param start: A number that can be represented as integers that specifies the starting index position for the search.
    :param end: A number that can be represented as integers that specifies the ending index position for the search.
    :return: Aggregation operator
    """
    res = [string_expression, substring_expression]
    if start is not None:
        res.append(start)
    if end is not None:
        res.append(end)
    return {'$indexOfArray': res}