def mk_find_in_field_logical_query(field, query):
    """
    Allows one to create "find in field" query of any logical complexity (since AND, OR, and NOT are supported).

    field is the field to consider

    query can be a string, a tuple, or a list, and can be nested:
        if query is a string, it is is considered to be "must be equal to this"
            if the string starts with "-", it is considered to be "must NOT equal to this"
        if query is a tuple, take the conjunction (AND) of the tuple's elements
        if query is a list, take the disjunction (OR) of the list's elements
    """
    if isinstance(query, str):
        if query[0] == '-':
            return {field: {'$not': {'$eq': query[1:]}}}
        else:
            return {field: query}
    elif isinstance(query, tuple):
        return {'$and': [mk_find_in_field_logical_query(field, q) for q in query]}
    elif isinstance(query, list):
        return {'$or': [mk_find_in_field_logical_query(field, q) for q in query]}
    else:
        raise TypeError("query must be a string, tuple, or list")