Skip to main content

Metadata Filters

vectlite supports MongoDB-style metadata filtering on search queries.

Metadata Types

Records can store rich metadata values:

  • str / string
  • int / number
  • float / number
  • bool / boolean
  • None / null
  • list / array
  • dict / object

Comparison Operators

OperatorDescription
$eqEqual to (default when using direct value)
$neNot equal to
$gtGreater than
$gteGreater than or equal to
$ltLess than
$lteLess than or equal to
# Implicit $eq
results = db.search(query, k=10, filter={"source": "blog"})

# Explicit operators
results = db.search(query, k=10, filter={"price": {"$gte": 10, "$lt": 100}})
const results = db.search(query, { k: 10, filter: { price: { $gte: 10, $lt: 100 } } })

Set Operators

OperatorDescription
$inValue is in the given list
$ninValue is not in the given list
$containsArray field contains the value
$existsField exists (true) or does not exist (false)
results = db.search(query, k=10, filter={
"category": {"$in": ["docs", "blog"]},
"tags": {"$contains": "python"},
"deprecated": {"$exists": False},
})

Logical Operators

OperatorDescription
$andAll conditions must match
$orAt least one condition must match
$notNegates a condition
results = db.search(query, k=10, filter={
"$or": [
{"source": "docs"},
{"priority": {"$gte": 5}},
]
})

Nested Access

Use dot notation to access nested fields:

results = db.search(query, k=10, filter={
"author.name": "Alice",
"metadata.tags": {"$contains": "python"},
})

Array Operators

OperatorDescription
$elemMatchArray element matches a condition
$sizeArray has exactly N elements
results = db.search(query, k=10, filter={
"reviews": {"$elemMatch": {"$gte": 4}},
"tags": {"$size": 3},
})