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
- For equality on a string: provide valueString — { operator: 'equal', path: ['status'], valueString: 'active' }.
- For equality on a number: provide valueNumber — { operator: 'equal', path: ['count'], valueNumber: 5 }.
- If neither a string nor number value is available, the equal operator cannot be built — remove it or pick a typed operator.
- 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
- For 'equal', require exactly one typed value field matching the property type.
- Reject equal filters carrying valueBoolean/valueTextArray only.
- Cover the fall-through path in unit tests so it is not a silent gap.
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
- Missing 'valueString' for 'like' operator.
- Missing 'valueTextArray' for 'containsAny' operator.
- Missing 'valueTextArray' for 'containsAll' operator.
- Missing 'valueNumber' for 'greaterThan' operator.
- Missing 'valueNumber' for 'lessThan' operator.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/9b3578f9c30f0f94.
Report an issue: GitHub.