{"record":{"id":"b0dec76b8f11bff5","repo":"chroma-core/chroma","slug":"expected-operator-to-be-one-of-gt-gte-lt-lt","errorCode":null,"errorMessage":"Expected operator to be one of $gt, $gte, $lt, $lte, $ne, $eq, $in, $nin, $contains, $not_contains, but got ${operator}","messagePattern":"Expected operator to be one of \\$gt, \\$gte, \\$lt, \\$lte, \\$ne, \\$eq, \\$in, \\$nin, \\$contains, \\$not_contains, but got (.+?)","errorType":"validation","errorClass":"ChromaValueError","httpStatus":null,"severity":"error","filePath":"clients/new-js/packages/chromadb/src/utils.ts","lineNumber":617,"sourceCode":"          `Expected operand value to be a string, number, or boolean for ${operator}, but got ${typeof operand}`,\n        );\n      }\n\n      if (\n        ![\n          \"$gt\",\n          \"$gte\",\n          \"$lt\",\n          \"$lte\",\n          \"$ne\",\n          \"$eq\",\n          \"$in\",\n          \"$nin\",\n          \"$contains\",\n          \"$not_contains\",\n        ].includes(operator)\n      ) {\n        throw new ChromaValueError(\n          `Expected operator to be one of $gt, $gte, $lt, $lte, $ne, $eq, $in, $nin, $contains, $not_contains, but got ${operator}`,\n        );\n      }\n\n      if (\n        ![\"string\", \"number\", \"boolean\"].includes(typeof operand) &&\n        !Array.isArray(operand)\n      ) {\n        throw new ChromaValueError(\n          \"Expected operand value to be a string, number, boolean, or a list of those types\",\n        );\n      }\n\n      if (\n        Array.isArray(operand) &&\n        (operand.length === 0 ||\n          !operand.every((item) => typeof item === typeof operand[0]))\n      ) {","sourceCodeStart":599,"sourceCodeEnd":635,"githubUrl":"https://github.com/chroma-core/chroma/blob/aecdd12c8a891610db8653630b066b32ceb678b5/clients/new-js/packages/chromadb/src/utils.ts#L599-L635","documentation":"The operator whitelist in validateWhere is $gt, $gte, $lt, $lte, $ne, $eq, $in, $nin, $contains, $not_contains; anything else in an operator expression throws ChromaValueError. There is no $regex, $like, $between, or $exists in Chroma's where grammar. Operators are lowercase — case variants like $Gt also fail.","triggerScenarios":"where: { name: { $regex: '^A' } }. { value: { $between: [1, 5] } }. { count: { $Gt: 10 } } (wrong case). { field: { $exists: true } }.","commonSituations":"Porting Mongo or SQL filters wholesale; IDE autocompletion suggesting Mongo operators; assuming SQL LIKE maps to a $like operator.","solutions":["Replace $regex/$like with $contains (substring) or $not_contains.","Express $between as an $and of $gte/$lte clauses.","Check operator names against the exact lowercase whitelist."],"exampleFix":"// before\nwhere: { name: { $like: '%Ada%' } }\n\n// after\nwhere: { name: { $contains: 'Ada' } }","handlingStrategy":"validation","validationCode":"const ALLOWED = new Set(['$gt','$gte','$lt','$lte','$ne','$eq','$in','$nin','$contains','$not_contains']);\nconst assertOperators = (w) => {\n  for (const v of Object.values(w)) {\n    if (typeof v === 'object' && v !== null && !Array.isArray(v)) {\n      for (const op of Object.keys(v)) {\n        if (!ALLOWED.has(op)) throw new Error(`Unsupported operator: ${op}`);\n      }\n    }\n  }\n};","typeGuard":"const isAllowedOperator = (op: string): op is\n  '$gt'|'$gte'|'$lt'|'$lte'|'$ne'|'$eq'|'$in'|'$nin'|'$contains'|'$not_contains' =>\n  ['$gt','$gte','$lt','$lte','$ne','$eq','$in','$nin','$contains','$not_contains'].includes(op);","tryCatchPattern":"try {\n  await collection.query({ queryTexts, where });\n} catch (e) {\n  if ((e as Error).message.includes('Expected operator to be one of')) {\n    // replace $regex/$like with $contains, $between with $gte/$lte, then retry\n  } else {\n    throw e;\n  }\n}","preventionTips":["Learn the 10 supported operators before porting Mongo/SQL filters.","Map $like/$regex to $contains; there is no regex support in where.","Keep operators lowercase — $Gt is invalid."],"tags":["where-filter","validation","unsupported-operator"],"backgroundTag":"invalid-where-clause","analyzedSha":"aecdd12c8a891610db8653630b066b32ceb678b5","analyzedAt":"2026-08-16T21:53:27.228Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}