{"record":{"id":"86ee9b1d89130e21","repo":"mem0ai/mem0","slug":"unsupported-filter-operator-op-for-pinecone","errorCode":null,"errorMessage":"Unsupported filter operator '${op}' for Pinecone","messagePattern":"Unsupported filter operator '(.+?)' for Pinecone","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"mem0-ts/src/oss/src/vector_stores/pinecone.ts","lineNumber":227,"sourceCode":"              pineconeOps[\"$lt\"] = opVal;\n              break;\n            case \"lte\":\n              pineconeOps[\"$lte\"] = opVal;\n              break;\n            case \"in\":\n              pineconeOps[\"$in\"] = opVal;\n              break;\n            case \"nin\":\n              pineconeOps[\"$nin\"] = opVal;\n              break;\n            case \"contains\":\n            case \"icontains\":\n              console.warn(\n                `Filter operator '${op}' is not supported by Pinecone metadata filters; skipping.`,\n              );\n              break;\n            default:\n              throw new Error(\n                `Unsupported filter operator '${op}' for Pinecone`,\n              );\n          }\n        }\n        if (Object.keys(pineconeOps).length > 0) {\n          result[key] = pineconeOps;\n        }\n        continue;\n      }\n\n      result[key] = { $eq: value };\n    }\n\n    return Object.keys(result).length > 0 ? result : undefined;\n  }\n\n  async insert(\n    vectors: number[][],","sourceCodeStart":209,"sourceCodeEnd":245,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0-ts/src/oss/src/vector_stores/pinecone.ts#L209-L245","documentation":"When translating mem0 SearchFilters to Pinecone metadata filter syntax, each operator in an object-valued filter is switched over. Recognized operators (eq, ne, gt, gte, lt, lte, in, nin) are mapped; contains/icontains are skipped with a warning because Pinecone metadata filtering does not support substring matching; any other operator throws this error.","triggerScenarios":"Passing filters like { tag: { has: 'x' } }, { f: { exists: true } }, or Mongo-style { '$gte': 1 } to a search on the Pinecone store; using an operator supported by pgvector/qdrant but not translated here.","commonSituations":"Sharing filter-building code across multiple vector store backends where one supports extra operators; typos in operator names; copying filter examples from Qdrant-style docs.","solutions":["Use only translated operators: eq, ne, gt, gte, lt, lte, in, nin","Replace contains/icontains substring filters with exact-match (eq/in) on pre-normalized metadata values, since Pinecone cannot do substring matching","Remove Mongo '$' prefixes from operator names","If you need contains semantics, store a lowercased exact field (e.g. tag_exact) and filter with eq"],"exampleFix":"// before\nconst r = await vs.search(vec, { filters: { tag: { $regex: 'news' } } });\n\n// after\nconst r = await vs.search(vec, { filters: { tag: { in: ['news', 'world'] } } });","handlingStrategy":"validation","validationCode":"const PINECONE_OPS = new Set(['eq','ne','gt','gte','lt','lte','in','nin']);\nfunction validatePineconeFilters(filters: any): void {\n  for (const v of Object.values(filters ?? {})) {\n    if (v && typeof v === 'object' && !Array.isArray(v)) {\n      for (const op of Object.keys(v)) {\n        if (!PINECONE_OPS.has(op)) throw new Error(`Operator '${op}' unsupported on Pinecone`);\n      }\n    }\n  }\n}\nvalidatePineconeFilters(filters);","typeGuard":"const isPineconeOperator = (op: string): boolean =>\n  ['eq','ne','gt','gte','lt','lte','in','nin'].includes(op);","tryCatchPattern":"try { await vs.search(vec, { filters }); } catch (e) { if (e instanceof Error && e.message.includes('for Pinecone')) { /* reduce filter to supported ops, retry */ } throw e; }","preventionTips":["Remember contains/icontains are silently skipped on Pinecone — design metadata for exact matching","Keep per-backend filter builders instead of one shared filter object across stores","Unit-test filter translation for every backend you support"],"tags":["pinecone","search-filters","operator-error","validation","typescript"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}