Supported commands
This is the FerretDB v1 (SQLite) fork. On top of upstream FerretDB v1.24.2 it adds, among other things: a single-node replica-set handshake with automatic oplog creation (replSetInitiate, replSetGetStatus, replSetGetConfig, replica-set hello/isMaster fields) so MongoDB-wire clients can tail changes instead of polling; the aggregation operators $eq, $ne, $or, $ifNull, $anyElementTrue, $objectToArray, $map and the equality-join $lookup stage; and the throttle self-throttling extension command (see the end of this page). The authoritative, dated list is in the CHANGELOG; the ROADMAP has the full comparison with upstream. FerretDB v1 (SQLite) is a general-purpose MongoDB 7 replacement, comparable to FerretDB v2 (PostgreSQL).
Query commands
| Command | Argument | Status | Comments |
|---|---|---|---|
delete | ✅ | Basic command is fully supported | |
deletes | ✅ | ||
comment | ⚠️ | ||
let | ⚠️ | Unimplemented | |
ordered | ✅ | ||
writeConcern | ⚠️ | Ignored | |
q | ✅ | ||
limit | ✅ | ||
collation | ❌ | Unimplemented | |
hint | ⚠️ | Ignored | |
find | ✅ | Basic command is fully supported | |
filter | ✅ | ||
sort | ✅ | ||
projection | ✅ | Fields, dot notation, and the $, $slice, $elemMatch and $meta operators | |
hint | ⚠️ | Ignored | |
skip | ⚠️ | ||
limit | ✅ | ||
batchSize | ✅ | ||
singleBatch | ✅ | ||
comment | ⚠️ | ||
maxTimeMS | ✅ | ||
readConcern | ⚠️ | Ignored | |
max | ⚠️ | Ignored | |
min | ⚠️ | Ignored | |
returnKey | ❌ | Unimplemented | |
showRecordId | ✅ | ||
tailable | ✅ | ||
oplogReplay | ⚠️ | Ignored | |
noCursorTimeout | ❌ | Issue | |
awaitData | ✅ | ||
allowPartialResults | ❌ | Unimplemented | |
collation | ❌ | Unimplemented | |
allowDiskUse | ⚠️ | Ignored | |
let | ❌ | Unimplemented | |
findAndModify | ✅ | Basic command is fully supported | |
query | ✅ | ||
sort | ✅ | ||
remove | ✅ | ||
update | ✅ | ||
new | ✅ | ||
upsert | ✅ | ||
bypassDocumentValidation | ⚠️ | Ignored | |
writeConcern | ⚠️ | Ignored | |
maxTimeMS | ✅ | ||
collation | ❌ | Unimplemented | |
arrayFilters | ❌ | Unimplemented | |
hint | ⚠️ | Ignored | |
comment | ⚠️ | ||
let | ⚠️ | Unimplemented | |
getMore | ✅ | Basic command is fully supported | |
batchSize | ✅ | ||
maxTimeMS | ✅ | ||
comment | ⚠️ | Unimplemented | |
insert | ✅ | Basic command is fully supported | |
documents | ✅ | ||
ordered | ✅ | ||
bypassDocumentValidation | ⚠️ | Ignored | |
comment | ⚠️ | Ignored | |
update | ✅ | Basic command is fully supported | |
updates | ✅ | ||
ordered | ⚠️ | Ignored | |
writeConcern | ⚠️ | Ignored | |
bypassDocumentValidation | ⚠️ | Ignored | |
comment | ⚠️ | ||
let | ⚠️ | Unimplemented | |
q | ✅ | ||
u | ⚠️ | Issue | |
c | ⚠️ | Unimplemented | |
upsert | ✅ | ||
multi | ✅ | ||
collation | ❌ | Unimplemented | |
arrayFilters | ⚠️ | Unimplemented | |
hint | ⚠️ | Ignored |
Update Operators
The following operators and modifiers are available in the update and findAndModify commands.
| Operator | Modifier | Status | Comments |
|---|---|---|---|
$currentDate | ✅ | ||
$inc | ✅ | ||
$min | ✅ | ||
$max | ✅ | ||
$mul | ✅ | ||
$rename | ✅ | ||
$set | ✅ | ||
$setOnInsert | ✅ | ||
$unset | ✅ | ||
$ | ⚠️ | Issue | |
$[] | ⚠️ | Issue | |
$[<identifier>] | ⚠️ | Issue | |
$addToSet | ✅️ | ||
$pop | ✅ | ||
$pull | ✅ | ||
$push | ✅️ | ||
$pullAll | ✅️ | ||
$each | ✅️ | ||
$position | ⚠️ | Issue | |
$slice | ⚠️ | Issue | |
$sort | ⚠️ | Issue | |
$bit | ✅️ |
Projection Operators
The following operators are available in the find command projection argument.
| Operator | Status | Comments |
|---|---|---|
$ | ✅️ | |
$elemMatch | ✅️ | The first matching element; the field is absent when none match |
$meta | ⚠️ | recordId and textScore; see below |
$slice | ✅️ | n, -n and [skip, n] |
All four are implemented once, in the handler above the backends, so every backend answers them the same way.
$slice and $meta are neither an inclusion nor an exclusion: on their own they return the whole document, with the array limited or the value added beside it. $elemMatch names a field to keep, so it is an inclusion and cannot be mixed with an exclusion.
$meta answers two keywords:
| Keyword | Status | Comments |
|---|---|---|
recordId | ✅️ | The storage-level identity of the document |
textScore | ⚠️ | Counted from this fork's own $text matching, so the ORDER matches MongoDB's but the VALUES do not. Refused, as MongoDB refuses it, when the query has no $text |
indexKey | ❌ | The index a query used is not available to the projection |
sortKey | ❌ | Internal to the query plan |
searchScore | ❌ | Atlas Search |
searchHighlights | ❌ | Atlas Search |
vectorSearchScore | ❌ | Atlas Vector Search |
Query Plan Cache Commands
| Command | Argument | Status | Comments |
|---|---|---|---|
planCacheClear | ❌ | Issue | |
query | ⚠️ | ||
projection | ⚠️ | ||
sort | ⚠️ | ||
comment | ⚠️ | ||
planCacheClearFilters | ❌ | Issue | |
query | ⚠️ | ||
sort | ⚠️ | ||
projection | ⚠️ | ||
collation | ❌ | Unimplemented | |
comment | ⚠️ | ||
planCacheListFilters | ❌ | Issue | |
comment | ⚠️ | ||
planCacheSetFilter | ❌ | Issue | |
query | ⚠️ | ||
sort | ⚠️ | ||
projection | ⚠️ | ||
collation | ❌ | Unimplemented | |
indexes | ⚠️ | ||
comment | ⚠️ |
Free Monitoring Commands
| Command | Argument | Status | Comments |
|---|---|---|---|
setFreeMonitoring | ✅ | Telemetry reporting | |
action: "enable" | ✅ |