{"record":{"id":"9b3578f9c30f0f94","repo":"n8n-io/n8n","slug":"no-valid-filter-value-provided-for-operator-ope","errorCode":null,"errorMessage":"No valid filter value provided for operator: ${operator}","messagePattern":"No valid filter value provided for operator: (.+?)","errorType":"exception","errorClass":"OperationalError","httpStatus":null,"severity":"warning","filePath":"packages/@n8n/nodes-langchain/nodes/vector_store/VectorStoreWeaviate/Weaviate.utils.ts","lineNumber":124,"sourceCode":"\t\t\treturn property.lessThan(filter.valueNumber);\n\n\t\tcase 'isnull':\n\t\t\tif (filter.valueBoolean === undefined) {\n\t\t\t\tthrow new OperationalError(\"Missing 'valueBoolean' for 'isNull' operator.\");\n\t\t\t}\n\t\t\treturn property.isNull(filter.valueBoolean);\n\n\t\tcase 'withingeorange':\n\t\t\tif (!filter.valueGeoCoordinates) {\n\t\t\t\tthrow new OperationalError(\"Missing 'valueGeoCoordinates' for 'withinGeoRange' operator.\");\n\t\t\t}\n\t\t\treturn property.withinGeoRange(filter.valueGeoCoordinates);\n\n\t\tdefault:\n\t\t\tthrow new OperationalError(`Unsupported operator: ${operator}`);\n\t}\n\n\tthrow new OperationalError(`No valid filter value provided for operator: ${operator}`);\n}\n\nexport function parseCompositeFilter(\n\tfilter: WeaviateCompositeFilter | WeaviateFilterUnit,\n): FilterValue {\n\t// Handle composite filters (AND/OR)\n\tif (typeof filter === 'object' && ('AND' in filter || 'OR' in filter)) {\n\t\tif ('AND' in filter) {\n\t\t\treturn Filters.and(...filter.AND.map(buildFilter));\n\t\t} else if ('OR' in filter) {\n\t\t\treturn Filters.or(...filter.OR.map(buildFilter));\n\t\t}\n\t}\n\n\t// Handle individual filter units\n\treturn buildFilter(filter);\n}\n","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/nodes-langchain/nodes/vector_store/VectorStoreWeaviate/Weaviate.utils.ts#L106-L142","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: { operator: 'equal', path: ['status'] }\n// after:  { operator: 'equal', path: ['status'], valueString: 'active' }","handlingStrategy":"validation","validationCode":"if (f.operator.toLowerCase() === 'equal' && f.valueString === undefined && f.valueNumber === undefined) { throw new Error(\"'equal' requires valueString or valueNumber\"); }","typeGuard":"function isEqualComplete(f: WeaviateFilterUnit): f is WeaviateFilterUnit & ({ valueString: string } | { valueNumber: number }) { return f.operator.toLowerCase() === 'equal' && (typeof f.valueString === 'string' || typeof f.valueNumber === 'number'); }","tryCatchPattern":"try { buildFilter(unit) } catch (e) { if (/No valid filter value/.test(e.message)) { /* supply string/number value */ } else throw e; }","preventionTips":["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."],"tags":["weaviate","filter","validation","operator","equal"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}