n8n-io/n8n · warning · OperationalError

Unsupported operator: ${operator}

Error message

Unsupported operator: ${operator}

What it means

OperationalError from buildFilter's default case: the operator string (compared case-insensitively) did not match any supported branch (equal, like, containsany, containsall, greaterthan, lessthan, isnull, withingeorange). The switch cannot build a filter for an unknown operator.

Source

Thrown at packages/@n8n/nodes-langchain/nodes/vector_store/VectorStoreWeaviate/Weaviate.utils.ts:121

			if (filter.valueNumber === undefined) {
				throw new OperationalError("Missing 'valueNumber' for 'lessThan' operator.");
			}
			return property.lessThan(filter.valueNumber);

		case 'isnull':
			if (filter.valueBoolean === undefined) {
				throw new OperationalError("Missing 'valueBoolean' for 'isNull' operator.");
			}
			return property.isNull(filter.valueBoolean);

		case 'withingeorange':
			if (!filter.valueGeoCoordinates) {
				throw new OperationalError("Missing 'valueGeoCoordinates' for 'withinGeoRange' operator.");
			}
			return property.withinGeoRange(filter.valueGeoCoordinates);

		default:
			throw new OperationalError(`Unsupported operator: ${operator}`);
	}

	throw new OperationalError(`No valid filter value provided for operator: ${operator}`);
}

export function parseCompositeFilter(
	filter: WeaviateCompositeFilter | WeaviateFilterUnit,
): FilterValue {
	// Handle composite filters (AND/OR)
	if (typeof filter === 'object' && ('AND' in filter || 'OR' in filter)) {
		if ('AND' in filter) {
			return Filters.and(...filter.AND.map(buildFilter));
		} else if ('OR' in filter) {
			return Filters.or(...filter.OR.map(buildFilter));
		}
	}

	// Handle individual filter units

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Use one of the supported operators: equal, like, containsAny, containsAll, greaterThan, lessThan, isNull, withinGeoRange.
  2. Trim and sanity-check the operator string before building the filter.
  3. If you need an unsupported operator, combine supported ones via a composite AND/OR filter instead.
  4. After an upgrade, re-check the supported operator list in Weaviate.utils.ts.

Example fix

// before: { operator: 'not_equal', path: ['status'], valueString: 'draft' }
// after:  // weaviate has no not_equal here; invert with a different model field or compose filters
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED = new Set(['equal','like','containsany','containsall','greaterthan','lessthan','isnull','withingeorange']); if (!SUPPORTED.has(f.operator.toLowerCase().trim())) { throw new Error(`Unsupported operator: ${f.operator}`); }

Type guard

function isSupportedOperator(op: unknown): op is string { return typeof op === 'string' && new Set(['equal','like','containsany','containsall','greaterthan','lessthan','isnull','withingeorange']).has(op.toLowerCase().trim()); }

Try / catch

try { buildFilter(unit) } catch (e) { if (/Unsupported operator/.test(e.message)) { /* map to supported operator or drop filter */ } else throw e; }

Prevention

When it happens

Trigger: A Weaviate filter unit carries an operator value outside the supported set, e.g. 'not_equal', 'contains', '>=', 'GreaterThan ' (with stray spaces), or a value produced by a typo/expression.

Common situations: Typo in operator string; caller used Weaviate-native operator names that n8n does not recognize; version change where a previously-valid operator was removed or renamed; whitespace/case artifacts from string concatenation.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/76b03d05634c237f. Report an issue: GitHub.