Beta v0.5.1b24 — past initial proving, but the Python API surface may still shift before 1.0. WiredTiger on-disk format is stable, but there's no migration tool yet — don't put production data here.

Multikey indexes: array fields are now IXSCAN-fast

9 May 2026 · Joe Drumgoole · Releases

Summary: Indexes on array-valued fields now use per-element entries, so {tags: "python"} against {tags: ["python", "go"]} lands at IXSCAN instead of falling back to a full collection scan (v0.3.0a75).

Before v0.3.0a75, the moment any document on an indexed field carried an array value, SecantusDB flagged the index multikey: True and the picker simply skipped it. Every subsequent query against that field — equality, range, $in, even $lookup joins — fell back to a full COLLSCAN with a Python-side matches() filter. Correct, but the index was effectively dead weight.

With this release, Storage writes one index entry per array element plus a whole-array entry whenever an indexed field is array-valued. So {tags: "python"} against {tags: ["python", "go"]} now hits IXSCAN through the per-element entry, while {tags: ["python", "go"]} whole-array equality hits the dedicated whole-array entry. Range, $in, and $lookup against array foreign fields all benefit; compound multikey takes the cartesian product. The multikey flag is still tracked and still respected by sort acceleration (one-doc-many-entries breaks natural-order walks), but it no longer disqualifies indexes from regular query routing.

Full release notes on GitHub · Install from PyPI · Tag