Transposes an array of input arrays so that the first element of the output array would be an array containing,
    the first element of the first input array,
    the first element of the second input array, etc.
    See https://docs.mongodb.com/manual/reference/operator/aggregation/zip/
    for more details
    :param inputs: An array of expressions that resolve to arrays.
    :param use_longest_length: A boolean which specifies whether the length of the longest array determines the number of arrays in the output array.
    :param defaults: An array of default element values to use if the input arrays have different lengths.
    :return: Aggregation operator

def ZIP(inputs, use_longest_length=None, defaults=None):
    """
    Transposes an array of input arrays so that the first element of the output array would be an array containing,
    the first element of the first input array,
    the first element of the second input array, etc.
    See https://docs.mongodb.com/manual/reference/operator/aggregation/zip/
    for more details
    :param inputs: An array of expressions that resolve to arrays.
    :param use_longest_length: A boolean which specifies whether the length of the longest array determines the number of arrays in the output array.
    :param defaults: An array of default element values to use if the input arrays have different lengths.
    :return: Aggregation operator
    """
    res = {'inputs': inputs}
    if use_longest_length in [True, False]:
        res['useLongestLength'] = use_longest_length
    if defaults is not None:
        res['defaults'] = defaults
    return {'$zip': res}