n8n-io/n8n · warning · OperationalError

Missing 'valueNumber' for 'lessThan' operator.

Error message

Missing 'valueNumber' for 'lessThan' operator.

What it means

OperationalError from buildFilter when operator is 'lessthan' but valueNumber is undefined. Symmetric to greaterThan.

Source

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

				throw new OperationalError("Missing 'valueTextArray' for 'containsAny' operator.");
			}
			return property.containsAny(filter.valueTextArray);

		case 'containsall':
			if (filter.valueTextArray === undefined) {
				throw new OperationalError("Missing 'valueTextArray' for 'containsAll' operator.");
			}
			return property.containsAll(filter.valueTextArray);

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

		case 'lessthan':
			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}`);
	}

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Provide valueNumber: { operator: 'lessThan', path: ['price'], valueNumber: 50 }.
  2. Coerce the source to a number before building the filter.
  3. Drop the filter unit if not applicable.

Example fix

// before: { operator: 'lessThan', path: ['price'] }
// after:  { operator: 'lessThan', path: ['price'], valueNumber: 50 }
Defensive patterns

Strategy: validation

Validate before calling

if (f.operator.toLowerCase() === 'lessthan' && typeof f.valueNumber !== 'number') { throw new Error("'lessThan' requires a numeric valueNumber"); }

Type guard

function isLessThanComplete(f: WeaviateFilterUnit): f is WeaviateFilterUnit & { valueNumber: number } { return f.operator.toLowerCase() === 'lessthan' && typeof f.valueNumber === 'number' && Number.isFinite(f.valueNumber); }

Try / catch

try { buildFilter(unit) } catch (e) { if (/valueNumber.*lessThan/.test(e.message)) { /* coerce or reprompt */ } else throw e; }

Prevention

When it happens

Trigger: Filter unit { operator: 'lessthan', path: [...], /* valueNumber missing */ } reaches buildFilter.

Common situations: Blank numeric field; expression resolved undefined/non-number; valueNumber key omitted.

Related errors


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