n8n-io/n8n · warning · OperationalError

No valid filter value provided for operator: ${operator}

Error message

No valid filter value provided for operator: ${operator}

What it means

OperationalError thrown at the end of buildFilter after the switch. It is reached only via the 'equal' case, which breaks (instead of throwing) when neither valueString nor valueNumber is defined; execution then falls through to this final throw. So this error effectively means: operator 'equal' without a valueString or valueNumber.

Source

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

			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
	return buildFilter(filter);
}

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. For equality on a string: provide valueString — { operator: 'equal', path: ['status'], valueString: 'active' }.
  2. For equality on a number: provide valueNumber — { operator: 'equal', path: ['count'], valueNumber: 5 }.
  3. If neither a string nor number value is available, the equal operator cannot be built — remove it or pick a typed operator.
  4. Validate that the value field matches the property's data type before submitting.

Example fix

// before: { operator: 'equal', path: ['status'] }
// after:  { operator: 'equal', path: ['status'], valueString: 'active' }
Defensive patterns

Strategy: validation

Validate before calling

if (f.operator.toLowerCase() === 'equal' && f.valueString === undefined && f.valueNumber === undefined) { throw new Error("'equal' requires valueString or valueNumber"); }

Type guard

function isEqualComplete(f: WeaviateFilterUnit): f is WeaviateFilterUnit & ({ valueString: string } | { valueNumber: number }) { return f.operator.toLowerCase() === 'equal' && (typeof f.valueString === 'string' || typeof f.valueNumber === 'number'); }

Try / catch

try { buildFilter(unit) } catch (e) { if (/No valid filter value/.test(e.message)) { /* supply string/number value */ } else throw e; }

Prevention

When it happens

Trigger: Filter unit { operator: 'equal', path: [...], /* no valueString AND no valueNumber */ } reaches buildFilter; the equal branch's two ifs both fail, it breaks, and the post-switch throw fires.

Common situations: Equal filter with a blank value; expression resolved to undefined; caller supplied valueBoolean/valueTextArray (the wrong field) expecting equality to work; JSON filter omitted both value fields.

Related errors


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