n8n-io/n8n · warning · OperationalError
Missing 'valueTextArray' for 'containsAny' operator.
Error message
Missing 'valueTextArray' for 'containsAny' operator.
What it means
buildFilter maps the node's filter configuration onto the Weaviate client API. For operator 'containsAny' the required valueTextArray field was not supplied (undefined), so the containsAny clause cannot be constructed and an OperationalError names the missing field.
Solutions
- Supply a non-empty valueTextArray: { operator: 'containsAny', path: ['tags'], valueTextArray: ['a','b'] }.
- Drop the filter unit if no array is available; containsAny with nothing is not meaningful.
- Pre-validate filter units so each operator carries its required value field.
Example fix
// before: { operator: 'containsAny', path: ['tags'] }
// after: { operator: 'containsAny', path: ['tags'], valueTextArray: ['red','blue'] } Defensive patterns
Strategy: validation
Validate before calling
if (f.operator.toLowerCase() === 'containsany' && (!Array.isArray(f.valueTextArray) || f.valueTextArray.length === 0)) { throw new Error("'containsAny' requires a non-empty valueTextArray"); } Type guard
function isContainsAnyComplete(f: WeaviateFilterUnit): f is WeaviateFilterUnit & { valueTextArray: string[] } { return f.operator.toLowerCase() === 'containsany' && Array.isArray(f.valueTextArray) && f.valueTextArray.every(v => typeof v === 'string'); } Try / catch
try { buildFilter(unit) } catch (e) { if (/valueTextArray.*containsAny/.test(e.message)) { /* supply array */ } else throw e; } Prevention
- Source containsAny arrays from typed list fields, not raw strings.
- Reject empty arrays at the form layer before they reach buildFilter.
- Use a shared filter-builder that enforces per-operator value presence.
When it happens
Trigger: Filter unit shaped { operator: 'containsany', path: [...], /* valueTextArray missing */ } reaches buildFilter.
Common situations: Array value left empty or sourced from an expression that resolved to undefined; JSON filter missing the valueTextArray key; caller assumed a default empty array.
Related errors
- Missing 'valueTextArray' for 'containsAll' operator.
- Missing 'valueBoolean' for 'isNull' operator.
- Missing 'valueGeoCoordinates' for 'withinGeoRange' 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/82bef6b521435378.
Report an issue: GitHub.
Appendix: source
Thrown at packages/@n8n/nodes-langchain/nodes/vector_store/VectorStoreWeaviate/Weaviate.utils.ts:86
function buildFilter(filter: WeaviateFilterUnit): FilterValue {
const { path, operator } = filter;
const property = weaviate.filter.byProperty(path[0]);
switch (operator.toLowerCase()) {
case 'equal':
if (filter.valueString !== undefined) return property.equal(filter.valueString);
if (filter.valueNumber !== undefined) return property.equal(filter.valueNumber);
break;
case 'like':
if (filter.valueString === undefined) {
throw new OperationalError("Missing 'valueString' for 'like' operator.");
}
return property.like(filter.valueString);
case 'containsany':
if (filter.valueTextArray === undefined) {
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.");View on GitHub (pinned to 5ac6606e81)