# FENVIX documentation > FENVIX is a database service where every customer, agent or test gets its own database. A database is a set of files on object storage that wakes on its first request and sleeps when idle. It speaks the MongoDB protocol, and a public HTTP API manages databases, their users, network allowlists, usage and API keys. # Introduction Source: https://docs.fenvix.dev/ What FENVIX is, how a database that sleeps works, and where to start. FENVIX is a database service where every customer, agent or test gets its own database. A database is a set of files on object storage. It wakes on its first request and goes back to sleep when nobody needs it, so an idle database costs storage only. ## What you get - **One database per customer, agent or test.** Isolation, restore and deletion work per database, not per shared cluster. - **Nothing running while idle.** A closed database makes no requests. Estimated at about $9 a month in storage for 1,000,000 idle databases, calculated from measurements on local disk at S3 Standard prices. - **Your existing drivers.** FENVIX speaks the MongoDB protocol, so MongoDB drivers and tools connect to it. Note: The $9 figure is a calculation, not a measurement at that scale: it comes from measurements on local disk with 200 documents per database, priced at S3 Standard storage prices. It has not been run with 1,000,000 databases on S3. It is not a latency or a throughput claim. ## Measured results | Fact | Result | | --- | --- | | Differential tests against a reference MongoDB 7.0, with the Python and Node.js drivers | 1,081 of 1,081 pass | | MongoDB 7.0 features that give the same result as a real MongoDB server | 1,237 of 1,268 | | Acknowledged writes lost across 20 forced kills | 0 | | Requests made by a closed database | 0 | 1,237 of 1,268 MongoDB 7.0 features, compared against a real MongoDB server, give the same result. See [Compatibility](https://docs.fenvix.dev/compatibility/) for what is supported. ## How these docs are organized - [Quickstart](https://docs.fenvix.dev/quickstart/): a connection string and examples with the Python and Node.js drivers. - [Concepts](https://docs.fenvix.dev/concepts/): wake, sleep and one owner per database. - [Compatibility](https://docs.fenvix.dev/compatibility/): which MongoDB features and operators are supported. - [Commands](https://docs.fenvix.dev/commands/): per-customer operations. - [FAQ](https://docs.fenvix.dev/faq/). # Quickstart Source: https://docs.fenvix.dev/quickstart/ Get a connection string and run your first queries with the Python and Node.js MongoDB drivers. This page connects an existing driver to a FENVIX database. `` below stands for the host of your database. To find it, open the console, go to **Databases**, open your database and look at the **Connection string** card on the Overview tab. It shows the **Host**, the **Port**, the **Database** and the **User**, and has a button that copies the whole string. ## 1. Get a connection string A connection string uses the MongoDB protocol. Replace the host of your current connection string with the FENVIX endpoint and keep the rest. ```text # before mongodb+srv://:@/acme # after mongodb://:@/acme ``` The database name in the path (`acme` here) selects the database. The first request to a sleeping database wakes it. The connection string the console shows is the full form, with the port and three options. TLS is required. ```text mongodb://:@:27017/?tls=true&authSource=&authMechanism=SCRAM-SHA-256 ``` The user and password are those of a database user, made in the **Users** tab of the database. A password is shown once, when the user is made; if it is lost, reset it in the same tab. ## 2. Connect with Python Install the driver, then connect, insert and read back. ```bash pip install pymongo ``` ```python from pymongo import MongoClient client = MongoClient("mongodb://:@/acme") db = client["acme"] db.orders.insert_one({"status": "paid", "total": 42}) print(db.orders.find_one({"status": "paid"})) ``` ## 3. Connect with Node.js ```bash npm install mongodb ``` ```js import { MongoClient } from "mongodb"; const client = new MongoClient("mongodb://:@/acme"); await client.connect(); const db = client.db("acme"); await db.collection("orders").insertOne({ status: "paid", total: 42 }); console.log(await db.collection("orders").findOne({ status: "paid" })); await client.close(); ``` ## 4. Query as before Aggregations work the same way. This example uses `$match` and `$lookup`, both in the supported set listed under [Compatibility](https://docs.fenvix.dev/compatibility/). ```js const paid = await db.collection("orders").aggregate([ { $match: { status: "paid" } }, { $lookup: { from: "users", localField: "userId", foreignField: "_id", as: "user" } }, ]).toArray(); ``` Note: Check [Compatibility](https://docs.fenvix.dev/compatibility/) against your own code before moving a real application. # Concepts Source: https://docs.fenvix.dev/concepts/ Databases that sleep: how a database wakes, sleeps, and why each one has a single owner. ## Databases that sleep An FENVIX database is a set of files on object storage. It is not a process that runs all day. It has two states. | State | Meaning | | --- | --- | | Awake | Filled dot. A server holds the database open and answers requests. | | Asleep | Outlined dot. Only its files exist, in the bucket. It makes no requests and costs storage only. | The state is always shown as a dot and a word, never by color. ## Wake A sleeping database wakes on its first request. The server reads the database's files from the bucket and then answers. The first request after a sleep is therefore slower than the ones after it. If a customer needs every millisecond, keep that database awake (see [Commands](https://docs.fenvix.dev/commands/#keep-awake)). A database that is kept awake never sleeps, so its first request is never slow. ## Sleep When nobody needs a database it goes back to sleep. A closed database makes 0 requests. ## Durability A write is acknowledged only once it is in the bucket. In our tests, 20 forced kills of the server lost no acknowledged write. ## One owner per database A database has one owner at a time: one server holds it open and takes its writes. When the database sleeps, the owner lets go, and the next server that wakes it becomes the owner. ## Protocols The engine is its own database engine on object storage. A protocol is the front door. The front door speaks the MongoDB protocol, which is why MongoDB drivers connect to it. # Compatibility Source: https://docs.fenvix.dev/compatibility/ Which MongoDB 7.0 features were compared against a real MongoDB server, with the result of every one. This page is for developers moving a MongoDB application to FENVIX. It lists what was compared with a real MongoDB server, what works with a difference, and what has no comparison test. It comes from an audit of the engine, so it says "Not tested" where the audit has no data. Performance and price are not covered at all. Note: Audit report date 2026-10-27. Reference server: mongod 7.0.45. Drivers tested: pymongo 4.19 and mongodb (Node.js) 7.7. Feature list last changed 2026-10-28. ## How to read this page Every feature in the audit has one of four results. | Result | Meaning | | --- | --- | | **Supported** | A comparison test against real MongoDB 7.0 passes, and none fails: the same request gives the same result on MongoDB and on Fenvix. | | **Partial** | It works, with a difference from MongoDB that is stated next to the feature. | | **Not tested** | The code exists, but no comparison test against MongoDB exists. This is not a claim that it works. | | **Not supported** | The engine rejects the feature with an error, or accepts it and ignores it. | A feature counts here when an application can reach it through a driver. Features left out on purpose are listed under [What is not counted](#what-is-not-counted) and are in no total. ## Summary Of **1,268** features counted, **1,237** are Supported (97.5%), 15 are Partial, 16 are Not tested and 0 are Not supported. 1,237 of 1,268 MongoDB 7.0 features, compared against a real MongoDB server, give the same result. | Result | Features | Share | | --- | --- | --- | | Supported | 1,237 | 97.5% | | Partial | 15 | 1.1% | | Not tested | 16 | 1.2% | | Not supported | 0 | 0.0% | | **All counted features** | **1,268** | | Shares are truncated to one decimal, never rounded up, so they can add up to slightly less than 100%. ## By area | Area | Features | Supported | Partial | Not tested | Not supported | | --- | --- | --- | --- | --- | --- | | Queries and operators | 135 | 135 | 0 | 0 | 0 | | Aggregation | 269 | 266 | 0 | 3 | 0 | | Indexes | 54 | 51 | 0 | 3 | 0 | | Data types | 52 | 51 | 1 | 0 | 0 | | Writes and bulk operations | 70 | 70 | 0 | 0 | 0 | | Transactions and concurrency | 37 | 37 | 0 | 0 | 0 | | Change streams | 27 | 27 | 0 | 0 | 0 | | GridFS | 17 | 17 | 0 | 0 | 0 | | Collation and sorting | 160 | 146 | 14 | 0 | 0 | | Authentication and security | 24 | 24 | 0 | 0 | 0 | | Drivers and protocol | 305 | 295 | 0 | 10 | 0 | | Admin commands | 118 | 118 | 0 | 0 | 0 | | **All areas** | **1,268** | **1,237** | **15** | **16** | **0** | ## Everything that is not Supported 31 of 1,268 features are not Supported. Here they all are, with the reason. | Feature | Area | Result | Note | | --- | --- | --- | --- | | `binData subtype 7 (Compressed time series data)` | types | Partial | A comparison probe (compat.bson.binsubtype_7) shows a difference from MongoDB; the audit data does not say in words what differs. | | `createSearchIndexes` | indexes | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `dropSearchIndex` | indexes | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `updateSearchIndex` | indexes | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `backwards` | collation | Partial | Backwards is available through the locale only (fr, fr_CA): any other locale with backwards different from its default is refused with BadValue, because the ICU4X collator has no such switch | | `normalization` | collation | Partial | Accepted, validated and listed like mongod; the ICU4X collator always normalizes, so strings that are not in FCD form compare as canonically equivalent also with normalization:false (g07.options matrix passes: its data are FCD) | | `cs@collation=search` | collation | Partial | Results differ from MongoDB 7.0.45: the 'search' collation type of cs differs between CLDR 29 (ICU 57) and the CLDR of ICU4X | | `de@collation=search` | collation | Partial | Results differ from MongoDB 7.0.45: the 'search' collation type of de differs between CLDR 29 (ICU 57) and the CLDR of ICU4X | | `en_US_POSIX` | collation | Partial | Results differ from MongoDB 7.0.45: ICU 57 tailors en_US_POSIX to ASCII code-point order; the ICU4X collation data has no such tailoring (root order is used) | | `haw` | collation | Partial | Results differ from MongoDB 7.0.45: Hawaiian tailoring is missing from the ICU4X data used by this build | | `kl` | collation | Partial | Results differ from MongoDB 7.0.45: Kalaallisut tailoring is missing from the ICU4X data used by this build | | `kl@collation=search` | collation | Partial | Results differ from MongoDB 7.0.45: same cause as locale kl | | `lv` | collation | Partial | Results differ from MongoDB 7.0.45: ICU 57's Latvian tailoring (y sorting with i) is not in the newer CLDR data of ICU4X, which orders lv like root | | `se` | collation | Partial | Results differ from MongoDB 7.0.45: Northern Sami tailoring (a-ring, a-umlaut, o-umlaut after z) is missing from the ICU4X data used by this build | | `se@collation=search` | collation | Partial | Results differ from MongoDB 7.0.45: same cause as locale se | | `sk@collation=search` | collation | Partial | Results differ from MongoDB 7.0.45: the 'search' collation type of sk differs between CLDR 29 (ICU 57) and the CLDR of ICU4X | | `smn` | collation | Partial | Results differ from MongoDB 7.0.45: Inari Sami tailoring is missing from the ICU4X data used by this build | | `smn@collation=search` | collation | Partial | Results differ from MongoDB 7.0.45: same cause as locale smn | | `Collection.createSearchIndex` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `Collection.createSearchIndexes` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `Collection.dropSearchIndex` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `Collection.listSearchIndexes` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `Collection.updateSearchIndex` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `pymongo.collection.Collection.create_search_index` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `pymongo.collection.Collection.create_search_indexes` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `pymongo.collection.Collection.drop_search_index` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `pymongo.collection.Collection.list_search_indexes` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `pymongo.collection.Collection.update_search_index` | drivers | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `$listSearchIndexes` | aggregation | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community has no search-index commands (they are Atlas/mongot), so there is no reference server; the behaviour is modelled on the documented Atlas commands and the drivers' index-management specification, and an index is READY and queryable as soon as it is created (nothing is built in the background); error codes other than the generic ones (27 IndexNotFound, 68 IndexAlreadyExists, 26 NamespaceNotFound) are not verified against Atlas | | `$search` | aggregation | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community rejects the stage ('only allowed on MongoDB Atlas', code 6047401), so there is no reference server; the engine evaluates the operators over the documents with the standard analyzer, scores follow BM25 without Lucene's length encoding (close to, not identical with, Atlas), and synonyms, scoreDetails and returnStoredSource are not supported | | `$searchMeta` | aggregation | Not tested | Implemented, but not compared with MongoDB: there is no reference server for it. It was tested against the documented behaviour only. Limit stated by the audit: mongod 7.0.45 Community rejects the stage ('only allowed on MongoDB Atlas', code 6047401), so there is no reference server; the engine evaluates the operators over the documents with the standard analyzer, scores follow BM25 without Lucene's length encoding (close to, not identical with, Atlas), and synonyms, scoreDetails and returnStoredSource are not supported | ## Search every feature All 1,268 counted features, with the result of each. Type in the box to narrow the table: a feature name (`$lookup`), an area (`indexes`) or a result (`partial`) all work. | Feature | Area | Category | Result | | --- | --- | --- | --- | | `$accumulator` | aggregation | accumulators | Supported | | `$addToSet` | aggregation | accumulators | Supported | | `$avg` | aggregation | accumulators | Supported | | `$bottom` | aggregation | accumulators | Supported | | `$bottomN` | aggregation | accumulators | Supported | | `$count` | aggregation | accumulators | Supported | | `$first` | aggregation | accumulators | Supported | | `$firstN` | aggregation | accumulators | Supported | | `$last` | aggregation | accumulators | Supported | | `$lastN` | aggregation | accumulators | Supported | | `$max` | aggregation | accumulators | Supported | | `$maxN` | aggregation | accumulators | Supported | | `$median` | aggregation | accumulators | Supported | | `$mergeObjects` | aggregation | accumulators | Supported | | `$min` | aggregation | accumulators | Supported | | `$minN` | aggregation | accumulators | Supported | | `$percentile` | aggregation | accumulators | Supported | | `$push` | aggregation | accumulators | Supported | | `$stdDevPop` | aggregation | accumulators | Supported | | `$stdDevSamp` | aggregation | accumulators | Supported | | `$sum` | aggregation | accumulators | Supported | | `$top` | aggregation | accumulators | Supported | | `$topN` | aggregation | accumulators | Supported | | `SCRAM-SHA-1` | security | authentication mechanisms | Supported | | `SCRAM-SHA-256` | security | authentication mechanisms | Supported | | `x.509 (MONGODB-X509)` | security | authentication mechanisms | Supported | | `binData subtype 0 (Generic binary subtype)` | types | bson binary subtypes | Supported | | `binData subtype 1 (Function data)` | types | bson binary subtypes | Supported | | `binData subtype 128 (Custom data)` | types | bson binary subtypes | Supported | | `binData subtype 2 (Binary (old))` | types | bson binary subtypes | Supported | | `binData subtype 3 (UUID (old))` | types | bson binary subtypes | Supported | | `binData subtype 4 (UUID)` | types | bson binary subtypes | Supported | | `binData subtype 5 (MD5)` | types | bson binary subtypes | Supported | | `binData subtype 6 (Encrypted BSON value)` | types | bson binary subtypes | Supported | | `binData subtype 7 (Compressed time series data)` | types | bson binary subtypes | Partial | | `Array (type 4, "array")` | types | bson types | Supported | | `Binary data (type 5, "binData")` | types | bson types | Supported | | `Boolean (type 8, "bool")` | types | bson types | Supported | | `Date (type 9, "date")` | types | bson types | Supported | | `DBPointer (type 12, "dbPointer")` | types | bson types | Supported | | `Decimal128 (type 19, "decimal")` | types | bson types | Supported | | `Double (type 1, "double")` | types | bson types | Supported | | `32-bit integer (type 16, "int")` | types | bson types | Supported | | `JavaScript (type 13, "javascript")` | types | bson types | Supported | | `JavaScript with scope (type 15, "javascriptWithScope")` | types | bson types | Supported | | `64-bit integer (type 18, "long")` | types | bson types | Supported | | `Max key (type 127, "maxKey")` | types | bson types | Supported | | `Min key (type -1, "minKey")` | types | bson types | Supported | | `Null (type 10, "null")` | types | bson types | Supported | | `Object (type 3, "object")` | types | bson types | Supported | | `ObjectId (type 7, "objectId")` | types | bson types | Supported | | `Regular Expression (type 11, "regex")` | types | bson types | Supported | | `String (type 2, "string")` | types | bson types | Supported | | `Symbol (type 14, "symbol")` | types | bson types | Supported | | `Timestamp (type 17, "timestamp")` | types | bson types | Supported | | `Undefined (type 6, "undefined")` | types | bson types | Supported | | `comparison rules: Arrays` | types | bson comparison order | Supported | | `comparison rules: BinData` | types | bson comparison order | Supported | | `comparison rules: Dates and Timestamps` | types | bson comparison order | Supported | | `comparison rules: Non-existent Fields` | types | bson comparison order | Supported | | `comparison rules: Numeric Types` | types | bson comparison order | Supported | | `comparison rules: Objects` | types | bson comparison order | Supported | | `comparison rules: Strings` | types | bson comparison order | Supported | | `order 1: MinKey (internal type)` | types | bson comparison order | Supported | | `order 10: Date` | types | bson comparison order | Supported | | `order 11: Timestamp` | types | bson comparison order | Supported | | `order 12: Regular Expression` | types | bson comparison order | Supported | | `order 13: JavaScript Code` | types | bson comparison order | Supported | | `order 14: JavaScript Code with Scope` | types | bson comparison order | Supported | | `order 15: MaxKey (internal type)` | types | bson comparison order | Supported | | `order 2: Null` | types | bson comparison order | Supported | | `order 3: Numbers (ints, longs, doubles, decimals)` | types | bson comparison order | Supported | | `order 4: Symbol, String` | types | bson comparison order | Supported | | `order 5: Object` | types | bson comparison order | Supported | | `order 6: Array` | types | bson comparison order | Supported | | `order 7: BinData` | types | bson comparison order | Supported | | `order 8: ObjectId` | types | bson comparison order | Supported | | `order 9: Boolean` | types | bson comparison order | Supported | | `deleteMany` | writes | bulk write | Supported | | `deleteOne` | writes | bulk write | Supported | | `insertOne` | writes | bulk write | Supported | | `ordered` | writes | bulk write | Supported | | `replaceOne` | writes | bulk write | Supported | | `updateMany` | writes | bulk write | Supported | | `updateOne` | writes | bulk write | Supported | | `abortTransaction` | transactions | commands / transactions | Supported | | `aggregate` | aggregation | commands / aggregation | Supported | | `authenticate` | security | commands / authentication | Supported | | `buildInfo` | drivers | commands / handshake and driver utility | Supported | | `cloneCollectionAsCapped` | admin | commands / collection and database management | Supported | | `collMod` | admin | commands / collection and database management | Supported | | `collStats` | admin | commands / diagnostics | Supported | | `commitTransaction` | transactions | commands / transactions | Supported | | `compact` | admin | commands / collection and database management | Supported | | `compactStructuredEncryptionData` | admin | commands / collection and database management | Supported | | `connectionStatus` | admin | commands / diagnostics | Supported | | `connPoolStats` | admin | commands / diagnostics | Supported | | `convertToCapped` | admin | commands / collection and database management | Supported | | `count` | aggregation | commands / aggregation | Supported | | `create` | admin | commands / collection and database management | Supported | | `createIndexes` | indexes | commands / index management | Supported | | `createRole` | security | commands / user and role management | Supported | | `createSearchIndexes` | indexes | commands / atlas search | Not tested | | `createUser` | security | commands / user and role management | Supported | | `currentOp` | admin | commands / diagnostics | Supported | | `dataSize` | admin | commands / diagnostics | Supported | | `dbHash` | admin | commands / diagnostics | Supported | | `dbStats` | admin | commands / diagnostics | Supported | | `delete` | writes | commands / crud | Supported | | `distinct` | aggregation | commands / aggregation | Supported | | `drop` | admin | commands / collection and database management | Supported | | `dropAllRolesFromDatabase` | security | commands / user and role management | Supported | | `dropAllUsersFromDatabase` | security | commands / user and role management | Supported | | `dropConnections` | admin | commands / server administration | Supported | | `dropDatabase` | admin | commands / collection and database management | Supported | | `dropIndexes` | indexes | commands / index management | Supported | | `dropRole` | security | commands / user and role management | Supported | | `dropSearchIndex` | indexes | commands / atlas search | Not tested | | `dropUser` | security | commands / user and role management | Supported | | `endSessions` | transactions | commands / sessions | Supported | | `explain` | admin | commands / diagnostics | Supported | | `features` | admin | commands / undocumented | Supported | | `filemd5` | admin | commands / collection and database management | Supported | | `find` | writes | commands / crud | Supported | | `findAndModify` | writes | commands / crud | Supported | | `fsync` | admin | commands / server administration | Supported | | `fsyncUnlock` | admin | commands / server administration | Supported | | `getClusterParameter` | admin | commands / diagnostics | Supported | | `getCmdLineOpts` | admin | commands / diagnostics | Supported | | `getDefaultRWConcern` | admin | commands / diagnostics | Supported | | `getLog` | admin | commands / diagnostics | Supported | | `getMore` | writes | commands / crud | Supported | | `getParameter` | drivers | commands / handshake and driver utility | Supported | | `grantPrivilegesToRole` | security | commands / user and role management | Supported | | `grantRolesToRole` | security | commands / user and role management | Supported | | `grantRolesToUser` | security | commands / user and role management | Supported | | `hello` | drivers | commands / handshake and driver utility | Supported | | `hostInfo` | admin | commands / diagnostics | Supported | | `insert` | writes | commands / crud | Supported | | `invalidateUserCache` | security | commands / user and role management | Supported | | `isMaster` | drivers | commands / handshake and driver utility | Supported | | `killAllSessions` | transactions | commands / sessions | Supported | | `killAllSessionsByPattern` | transactions | commands / sessions | Supported | | `killCursors` | writes | commands / crud | Supported | | `killOp` | admin | commands / diagnostics | Supported | | `killSessions` | transactions | commands / sessions | Supported | | `listCollections` | admin | commands / collection and database management | Supported | | `listCommands` | admin | commands / diagnostics | Supported | | `listDatabases` | admin | commands / collection and database management | Supported | | `listIndexes` | indexes | commands / index management | Supported | | `lockInfo` | admin | commands / diagnostics | Supported | | `logout` | security | commands / authentication | Supported | | `logRotate` | admin | commands / server administration | Supported | | `mapReduce` | aggregation | commands / aggregation | Supported | | `ping` | drivers | commands / handshake and driver utility | Supported | | `planCacheClear` | admin | commands / query plan cache | Supported | | `planCacheClearFilters` | admin | commands / query plan cache | Supported | | `planCacheListFilters` | admin | commands / query plan cache | Supported | | `planCacheSetFilter` | admin | commands / query plan cache | Supported | | `profile` | admin | commands / diagnostics | Supported | | `refreshSessions` | transactions | commands / sessions | Supported | | `reIndex` | indexes | commands / index management | Supported | | `renameCollection` | admin | commands / collection and database management | Supported | | `replSetGetConfig` | admin | commands / replication | Supported | | `replSetGetStatus` | admin | commands / replication | Supported | | `revokePrivilegesFromRole` | security | commands / user and role management | Supported | | `revokeRolesFromRole` | security | commands / user and role management | Supported | | `revokeRolesFromUser` | security | commands / user and role management | Supported | | `rolesInfo` | security | commands / user and role management | Supported | | `rotateCertificates` | admin | commands / server administration | Supported | | `saslContinue` | security | commands / authentication | Supported | | `saslStart` | security | commands / authentication | Supported | | `serverStatus` | admin | commands / diagnostics | Supported | | `setClusterParameter` | admin | commands / server administration | Supported | | `setDefaultRWConcern` | admin | commands / server administration | Supported | | `setFeatureCompatibilityVersion` | admin | commands / server administration | Supported | | `setIndexCommitQuorum` | indexes | commands / index management | Supported | | `setParameter` | admin | commands / server administration | Supported | | `setUserWriteBlockMode` | admin | commands / server administration | Supported | | `shutdown` | admin | commands / server administration | Supported | | `startSession` | transactions | commands / sessions | Supported | | `top` | admin | commands / diagnostics | Supported | | `update` | writes | commands / crud | Supported | | `updateRole` | security | commands / user and role management | Supported | | `updateSearchIndex` | indexes | commands / atlas search | Not tested | | `updateUser` | security | commands / user and role management | Supported | | `usersInfo` | security | commands / user and role management | Supported | | `validate` | admin | commands / diagnostics | Supported | | `validateDBMetadata` | admin | commands / diagnostics | Supported | | `whatsmyuri` | admin | commands / diagnostics | Supported | | `alternate` | collation | collation | Supported | | `backwards` | collation | collation | Partial | | `caseFirst` | collation | collation | Supported | | `caseLevel` | collation | collation | Supported | | `locale` | collation | collation | Supported | | `maxVariable` | collation | collation | Supported | | `normalization` | collation | collation | Partial | | `numericOrdering` | collation | collation | Supported | | `simple (binary) collation` | collation | collation | Supported | | `strength` | collation | collation | Supported | | `pre- and post-images (changeStreamPreAndPostImages)` | changestreams | change streams | Supported | | `required` | changestreams | change streams | Supported | | `resume token` | changestreams | change streams | Supported | | `updateLookup` | changestreams | change streams | Supported | | `watch a collection` | changestreams | change streams | Supported | | `watch a database` | changestreams | change streams | Supported | | `watch a deployment` | changestreams | change streams | Supported | | `whenAvailable` | changestreams | change streams | Supported | | `create` | changestreams | change stream events | Supported | | `createIndexes` | changestreams | change stream events | Supported | | `delete` | changestreams | change stream events | Supported | | `drop` | changestreams | change stream events | Supported | | `dropDatabase` | changestreams | change stream events | Supported | | `dropIndexes` | changestreams | change stream events | Supported | | `insert` | changestreams | change stream events | Supported | | `invalidate` | changestreams | change stream events | Supported | | `modify` | changestreams | change stream events | Supported | | `rename` | changestreams | change stream events | Supported | | `replace` | changestreams | change stream events | Supported | | `update` | changestreams | change stream events | Supported | | `$changeStream.allChangesForCluster` | changestreams | change streams | Supported | | `$changeStream.fullDocument` | changestreams | change streams | Supported | | `$changeStream.fullDocumentBeforeChange` | changestreams | change streams | Supported | | `$changeStream.resumeAfter` | changestreams | change streams | Supported | | `$changeStream.showExpandedEvents` | changestreams | change streams | Supported | | `$changeStream.startAfter` | changestreams | change streams | Supported | | `$changeStream.startAtOperationTime` | changestreams | change streams | Supported | | `allowPartialResults` | queries | cursors | Supported | | `awaitData` | queries | cursors | Supported | | `batchSize` | queries | cursors | Supported | | `firstBatch` | queries | cursors | Supported | | `nextBatch` | queries | cursors | Supported | | `noCursorTimeout` | queries | cursors | Supported | | `noCursorTimeout (method)` | queries | cursors | Supported | | `tailable cursor` | queries | cursors | Supported | | `$abs` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$accumulator` | aggregation | aggregation expressions / Custom Aggregation Operators | Supported | | `$acos` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$acosh` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$add` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$allElementsTrue` | aggregation | aggregation expressions / Set Operators | Supported | | `$and` | aggregation | aggregation expressions / Boolean Operators | Supported | | `$anyElementTrue` | aggregation | aggregation expressions / Set Operators | Supported | | `$arrayElemAt` | aggregation | aggregation expressions / Array Operators | Supported | | `$arrayToObject` | aggregation | aggregation expressions / Array Operators | Supported | | `$asin` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$asinh` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$atan` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$atan2` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$atanh` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$avg` | aggregation | aggregation expressions / Expressions Associated with Accumulators | Supported | | `$binarySize` | aggregation | aggregation expressions / Data Size Operators | Supported | | `$bitAnd` | aggregation | aggregation expressions / Bitwise Operators | Supported | | `$bitNot` | aggregation | aggregation expressions / Bitwise Operators | Supported | | `$bitOr` | aggregation | aggregation expressions / Bitwise Operators | Supported | | `$bitXor` | aggregation | aggregation expressions / Bitwise Operators | Supported | | `$bsonSize` | aggregation | aggregation expressions / Data Size Operators | Supported | | `$ceil` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$cmp` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$concat` | aggregation | aggregation expressions / String Operators | Supported | | `$concatArrays` | aggregation | aggregation expressions / Array Operators | Supported | | `$cond` | aggregation | aggregation expressions / Conditional Operators | Supported | | `$convert` | aggregation | aggregation expressions / Type Operators | Supported | | `$cos` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$cosh` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$dateAdd` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateDiff` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateFromParts` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateFromString` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateSubtract` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateToParts` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateToString` | aggregation | aggregation expressions / Date Operators | Supported | | `$dateTrunc` | aggregation | aggregation expressions / Date Operators | Supported | | `$dayOfMonth` | aggregation | aggregation expressions / Date Operators | Supported | | `$dayOfWeek` | aggregation | aggregation expressions / Date Operators | Supported | | `$dayOfYear` | aggregation | aggregation expressions / Date Operators | Supported | | `$degreesToRadians` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$divide` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$eq` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$exp` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$filter` | aggregation | aggregation expressions / Array Operators | Supported | | `$first` | aggregation | aggregation expressions / Array Operators | Supported | | `$firstN` | aggregation | aggregation expressions / Array Operators | Supported | | `$floor` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$function` | aggregation | aggregation expressions / Custom Aggregation Operators | Supported | | `$getField` | aggregation | aggregation expressions / Miscellaneous Operators | Supported | | `$gt` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$gte` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$hour` | aggregation | aggregation expressions / Date Operators | Supported | | `$ifNull` | aggregation | aggregation expressions / Conditional Operators | Supported | | `$in` | aggregation | aggregation expressions / Array Operators | Supported | | `$indexOfArray` | aggregation | aggregation expressions / Array Operators | Supported | | `$indexOfBytes` | aggregation | aggregation expressions / String Operators | Supported | | `$indexOfCP` | aggregation | aggregation expressions / String Operators | Supported | | `$isArray` | aggregation | aggregation expressions / Array Operators | Supported | | `$isNumber` | aggregation | aggregation expressions / Type Operators | Supported | | `$isoDayOfWeek` | aggregation | aggregation expressions / Date Operators | Supported | | `$isoWeek` | aggregation | aggregation expressions / Date Operators | Supported | | `$isoWeekYear` | aggregation | aggregation expressions / Date Operators | Supported | | `$last` | aggregation | aggregation expressions / Array Operators | Supported | | `$lastN` | aggregation | aggregation expressions / Array Operators | Supported | | `$let` | aggregation | aggregation expressions / Variable Operators | Supported | | `$literal` | aggregation | aggregation expressions / Literal Expression Operators | Supported | | `$ln` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$log` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$log10` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$lt` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$lte` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$ltrim` | aggregation | aggregation expressions / String Operators | Supported | | `$map` | aggregation | aggregation expressions / Array Operators | Supported | | `$max` | aggregation | aggregation expressions / Expressions Associated with Accumulators | Supported | | `$maxN` | aggregation | aggregation expressions / Array Operators | Supported | | `$median` | aggregation | aggregation expressions / Expressions Associated with Accumulators | Supported | | `$mergeObjects` | aggregation | aggregation expressions / Object Operators | Supported | | `$meta` | aggregation | aggregation expressions / Text Operators | Supported | | `$millisecond` | aggregation | aggregation expressions / Date Operators | Supported | | `$min` | aggregation | aggregation expressions / Expressions Associated with Accumulators | Supported | | `$minN` | aggregation | aggregation expressions / Array Operators | Supported | | `$minute` | aggregation | aggregation expressions / Date Operators | Supported | | `$mod` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$month` | aggregation | aggregation expressions / Date Operators | Supported | | `$multiply` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$ne` | aggregation | aggregation expressions / Comparison Operators | Supported | | `$not` | aggregation | aggregation expressions / Boolean Operators | Supported | | `$objectToArray` | aggregation | aggregation expressions / Array Operators | Supported | | `$or` | aggregation | aggregation expressions / Boolean Operators | Supported | | `$percentile` | aggregation | aggregation expressions / Expressions Associated with Accumulators | Supported | | `$pow` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$radiansToDegrees` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$rand` | aggregation | aggregation expressions / Miscellaneous Operators | Supported | | `$range` | aggregation | aggregation expressions / Array Operators | Supported | | `$reduce` | aggregation | aggregation expressions / Array Operators | Supported | | `$regexFind` | aggregation | aggregation expressions / String Operators | Supported | | `$regexFindAll` | aggregation | aggregation expressions / String Operators | Supported | | `$regexMatch` | aggregation | aggregation expressions / String Operators | Supported | | `$replaceAll` | aggregation | aggregation expressions / String Operators | Supported | | `$replaceOne` | aggregation | aggregation expressions / String Operators | Supported | | `$reverseArray` | aggregation | aggregation expressions / Array Operators | Supported | | `$round` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$rtrim` | aggregation | aggregation expressions / String Operators | Supported | | `$sampleRate` | aggregation | aggregation expressions / Miscellaneous Operators | Supported | | `$second` | aggregation | aggregation expressions / Date Operators | Supported | | `$setDifference` | aggregation | aggregation expressions / Set Operators | Supported | | `$setEquals` | aggregation | aggregation expressions / Set Operators | Supported | | `$setField` | aggregation | aggregation expressions / Object Operators | Supported | | `$setIntersection` | aggregation | aggregation expressions / Set Operators | Supported | | `$setIsSubset` | aggregation | aggregation expressions / Set Operators | Supported | | `$setUnion` | aggregation | aggregation expressions / Set Operators | Supported | | `$sin` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$sinh` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$size` | aggregation | aggregation expressions / Array Operators | Supported | | `$slice` | aggregation | aggregation expressions / Array Operators | Supported | | `$sortArray` | aggregation | aggregation expressions / Array Operators | Supported | | `$split` | aggregation | aggregation expressions / String Operators | Supported | | `$sqrt` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$stdDevPop` | aggregation | aggregation expressions / Expressions Associated with Accumulators | Supported | | `$strcasecmp` | aggregation | aggregation expressions / String Operators | Supported | | `$strLenBytes` | aggregation | aggregation expressions / String Operators | Supported | | `$strLenCP` | aggregation | aggregation expressions / String Operators | Supported | | `$substr` | aggregation | aggregation expressions / String Operators | Supported | | `$substrBytes` | aggregation | aggregation expressions / String Operators | Supported | | `$substrCP` | aggregation | aggregation expressions / String Operators | Supported | | `$subtract` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$switch` | aggregation | aggregation expressions / Conditional Operators | Supported | | `$tan` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$tanh` | aggregation | aggregation expressions / Trigonometry Operators | Supported | | `$toBool` | aggregation | aggregation expressions / Type Operators | Supported | | `$toDate` | aggregation | aggregation expressions / Date Operators | Supported | | `$toDecimal` | aggregation | aggregation expressions / Type Operators | Supported | | `$toDouble` | aggregation | aggregation expressions / Type Operators | Supported | | `$toHashedIndexKey` | aggregation | aggregation expressions / Miscellaneous Operators | Supported | | `$toInt` | aggregation | aggregation expressions / Type Operators | Supported | | `$toLong` | aggregation | aggregation expressions / Type Operators | Supported | | `$toLower` | aggregation | aggregation expressions / String Operators | Supported | | `$toObjectId` | aggregation | aggregation expressions / Type Operators | Supported | | `$toString` | aggregation | aggregation expressions / String Operators | Supported | | `$toUpper` | aggregation | aggregation expressions / String Operators | Supported | | `$trim` | aggregation | aggregation expressions / String Operators | Supported | | `$trunc` | aggregation | aggregation expressions / Arithmetic Operators | Supported | | `$tsIncrement` | aggregation | aggregation expressions / Timestamp Operators | Supported | | `$tsSecond` | aggregation | aggregation expressions / Timestamp Operators | Supported | | `$type` | aggregation | aggregation expressions / Type Operators | Supported | | `$unsetField` | aggregation | aggregation expressions / Object Operators | Supported | | `$week` | aggregation | aggregation expressions / Date Operators | Supported | | `$year` | aggregation | aggregation expressions / Date Operators | Supported | | `$zip` | aggregation | aggregation expressions / Array Operators | Supported | | `chunks unique index (files_id, n)` | gridfs | gridfs | Supported | | `chunks._id` | gridfs | gridfs | Supported | | `chunks.data` | gridfs | gridfs | Supported | | `chunks.files_id` | gridfs | gridfs | Supported | | `chunks.n` | gridfs | gridfs | Supported | | `files index (filename, uploadDate)` | gridfs | gridfs | Supported | | `files._id` | gridfs | gridfs | Supported | | `files.aliases` | gridfs | gridfs | Supported | | `files.chunkSize` | gridfs | gridfs | Supported | | `files.contentType` | gridfs | gridfs | Supported | | `files.filename` | gridfs | gridfs | Supported | | `files.length` | gridfs | gridfs | Supported | | `files.md5` | gridfs | gridfs | Supported | | `files.metadata` | gridfs | gridfs | Supported | | `files.uploadDate` | gridfs | gridfs | Supported | | `fs.chunks collection` | gridfs | gridfs | Supported | | `fs.files collection` | gridfs | gridfs | Supported | | `case-insensitive index` | indexes | index properties | Supported | | `hidden index` | indexes | index properties | Supported | | `partial index` | indexes | index properties | Supported | | `sparse index` | indexes | index properties | Supported | | `TTL index` | indexes | index properties | Supported | | `unique index` | indexes | index properties | Supported | | `2d` | indexes | index types | Supported | | `2dsphere` | indexes | index types | Supported | | `clustered index` | indexes | index types | Supported | | `compound index` | indexes | index types | Supported | | `compound wildcard index` | indexes | index types | Supported | | `hashed index` | indexes | index types | Supported | | `multikey index` | indexes | index types | Supported | | `single field index` | indexes | index types | Supported | | `text index` | indexes | index types | Supported | | `wildcard index` | indexes | index types | Supported | | `$accumulator.accumulate` | queries | server-side javascript | Supported | | `$accumulator.accumulateArgs` | queries | server-side javascript | Supported | | `$accumulator.finalize` | queries | server-side javascript | Supported | | `$accumulator.init` | queries | server-side javascript | Supported | | `$accumulator.initArgs` | queries | server-side javascript | Supported | | `$accumulator.lang` | queries | server-side javascript | Supported | | `$accumulator.merge` | queries | server-side javascript | Supported | | `$function.args` | queries | server-side javascript | Supported | | `$function.body` | queries | server-side javascript | Supported | | `$function.lang` | queries | server-side javascript | Supported | | `af` | collation | collation locales | Supported | | `am` | collation | collation locales | Supported | | `ar` | collation | collation locales | Supported | | `ar@collation=compat` | collation | collation locales | Supported | | `as` | collation | collation locales | Supported | | `az` | collation | collation locales | Supported | | `az@collation=search` | collation | collation locales | Supported | | `be` | collation | collation locales | Supported | | `bg` | collation | collation locales | Supported | | `bn` | collation | collation locales | Supported | | `bn@collation=traditional` | collation | collation locales | Supported | | `bo` | collation | collation locales | Supported | | `bs` | collation | collation locales | Supported | | `bs_Cyrl` | collation | collation locales | Supported | | `bs@collation=search` | collation | collation locales | Supported | | `ca` | collation | collation locales | Supported | | `ca@collation=search` | collation | collation locales | Supported | | `chr` | collation | collation locales | Supported | | `cs` | collation | collation locales | Supported | | `cs@collation=search` | collation | collation locales | Partial | | `cy` | collation | collation locales | Supported | | `da` | collation | collation locales | Supported | | `da@collation=search` | collation | collation locales | Supported | | `de` | collation | collation locales | Supported | | `de_AT` | collation | collation locales | Supported | | `de_AT@collation=phonebook` | collation | collation locales | Supported | | `de@collation=eor` | collation | collation locales | Supported | | `de@collation=phonebook` | collation | collation locales | Supported | | `de@collation=search` | collation | collation locales | Partial | | `dsb` | collation | collation locales | Supported | | `dz` | collation | collation locales | Supported | | `ee` | collation | collation locales | Supported | | `el` | collation | collation locales | Supported | | `en` | collation | collation locales | Supported | | `en_US` | collation | collation locales | Supported | | `en_US_POSIX` | collation | collation locales | Partial | | `eo` | collation | collation locales | Supported | | `es` | collation | collation locales | Supported | | `es@collation=search` | collation | collation locales | Supported | | `es@collation=traditional` | collation | collation locales | Supported | | `et` | collation | collation locales | Supported | | `fa` | collation | collation locales | Supported | | `fa_AF` | collation | collation locales | Supported | | `fi` | collation | collation locales | Supported | | `fi@collation=search` | collation | collation locales | Supported | | `fi@collation=traditional` | collation | collation locales | Supported | | `fil` | collation | collation locales | Supported | | `fo` | collation | collation locales | Supported | | `fr` | collation | collation locales | Supported | | `fr_CA` | collation | collation locales | Supported | | `ga` | collation | collation locales | Supported | | `gl` | collation | collation locales | Supported | | `gl@collation=search` | collation | collation locales | Supported | | `gu` | collation | collation locales | Supported | | `ha` | collation | collation locales | Supported | | `haw` | collation | collation locales | Partial | | `he` | collation | collation locales | Supported | | `he@collation=search` | collation | collation locales | Supported | | `hi` | collation | collation locales | Supported | | `hr` | collation | collation locales | Supported | | `hr@collation=search` | collation | collation locales | Supported | | `hsb` | collation | collation locales | Supported | | `hu` | collation | collation locales | Supported | | `hy` | collation | collation locales | Supported | | `id` | collation | collation locales | Supported | | `ig` | collation | collation locales | Supported | | `is` | collation | collation locales | Supported | | `is@collation=search` | collation | collation locales | Supported | | `it` | collation | collation locales | Supported | | `ja` | collation | collation locales | Supported | | `ja@collation=unihan` | collation | collation locales | Supported | | `ka` | collation | collation locales | Supported | | `kk` | collation | collation locales | Supported | | `kl` | collation | collation locales | Partial | | `kl@collation=search` | collation | collation locales | Partial | | `km` | collation | collation locales | Supported | | `kn` | collation | collation locales | Supported | | `kn@collation=traditional` | collation | collation locales | Supported | | `ko` | collation | collation locales | Supported | | `ko@collation=search` | collation | collation locales | Supported | | `ko@collation=searchjl` | collation | collation locales | Supported | | `ko@collation=unihan` | collation | collation locales | Supported | | `kok` | collation | collation locales | Supported | | `ky` | collation | collation locales | Supported | | `lb` | collation | collation locales | Supported | | `lkt` | collation | collation locales | Supported | | `ln` | collation | collation locales | Supported | | `ln@collation=phonetic` | collation | collation locales | Supported | | `lo` | collation | collation locales | Supported | | `lt` | collation | collation locales | Supported | | `lv` | collation | collation locales | Partial | | `mk` | collation | collation locales | Supported | | `ml` | collation | collation locales | Supported | | `mn` | collation | collation locales | Supported | | `mr` | collation | collation locales | Supported | | `ms` | collation | collation locales | Supported | | `mt` | collation | collation locales | Supported | | `my` | collation | collation locales | Supported | | `nb` | collation | collation locales | Supported | | `nb@collation=search` | collation | collation locales | Supported | | `ne` | collation | collation locales | Supported | | `nl` | collation | collation locales | Supported | | `nn` | collation | collation locales | Supported | | `nn@collation=search` | collation | collation locales | Supported | | `om` | collation | collation locales | Supported | | `or` | collation | collation locales | Supported | | `pa` | collation | collation locales | Supported | | `pl` | collation | collation locales | Supported | | `ps` | collation | collation locales | Supported | | `pt` | collation | collation locales | Supported | | `ro` | collation | collation locales | Supported | | `ru` | collation | collation locales | Supported | | `se` | collation | collation locales | Partial | | `se@collation=search` | collation | collation locales | Partial | | `si` | collation | collation locales | Supported | | `si@collation=dictionary` | collation | collation locales | Supported | | `sk` | collation | collation locales | Supported | | `sk@collation=search` | collation | collation locales | Partial | | `sl` | collation | collation locales | Supported | | `smn` | collation | collation locales | Partial | | `smn@collation=search` | collation | collation locales | Partial | | `sq` | collation | collation locales | Supported | | `sr` | collation | collation locales | Supported | | `sr_Latn` | collation | collation locales | Supported | | `sr_Latn@collation=search` | collation | collation locales | Supported | | `sv` | collation | collation locales | Supported | | `sv@collation=search` | collation | collation locales | Supported | | `sw` | collation | collation locales | Supported | | `ta` | collation | collation locales | Supported | | `te` | collation | collation locales | Supported | | `th` | collation | collation locales | Supported | | `to` | collation | collation locales | Supported | | `tr` | collation | collation locales | Supported | | `tr@collation=search` | collation | collation locales | Supported | | `ug` | collation | collation locales | Supported | | `uk` | collation | collation locales | Supported | | `ur` | collation | collation locales | Supported | | `vi` | collation | collation locales | Supported | | `vi@collation=traditional` | collation | collation locales | Supported | | `wae` | collation | collation locales | Supported | | `yi` | collation | collation locales | Supported | | `yi@collation=search` | collation | collation locales | Supported | | `yo` | collation | collation locales | Supported | | `zh` | collation | collation locales | Supported | | `zh_Hant` | collation | collation locales | Supported | | `zh@collation=big5han` | collation | collation locales | Supported | | `zh@collation=gb2312han` | collation | collation locales | Supported | | `zh@collation=unihan` | collation | collation locales | Supported | | `zh@collation=zhuyin` | collation | collation locales | Supported | | `zu` | collation | collation locales | Supported | | `AbstractCursor.addCursorFlag` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.batchSize` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.clone` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.close-1` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.forEach` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.hasNext` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.maxTimeMS` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.next` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.rewind` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.stream` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.toArray` | drivers | driver api node / AbstractCursor | Supported | | `AbstractCursor.tryNext` | drivers | driver api node / AbstractCursor | Supported | | `Admin.buildInfo` | drivers | driver api node / Admin | Supported | | `Admin.command` | drivers | driver api node / Admin | Supported | | `Admin.listDatabases` | drivers | driver api node / Admin | Supported | | `Admin.ping` | drivers | driver api node / Admin | Supported | | `Admin.removeUser` | drivers | driver api node / Admin | Supported | | `Admin.replSetGetStatus` | drivers | driver api node / Admin | Supported | | `Admin.serverInfo` | drivers | driver api node / Admin | Supported | | `Admin.serverStatus` | drivers | driver api node / Admin | Supported | | `Admin.validateCollection` | drivers | driver api node / Admin | Supported | | `AggregationCursor.addStage` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.clone` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.explain` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.geoNear` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.group` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.limit` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.lookup` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.match` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.out` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.project` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.redact` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.skip` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.sort` | drivers | driver api node / AggregationCursor | Supported | | `AggregationCursor.unwind` | drivers | driver api node / AggregationCursor | Supported | | `BulkOperationBase.execute` | drivers | driver api node / BulkOperationBase | Supported | | `BulkOperationBase.find` | drivers | driver api node / BulkOperationBase | Supported | | `BulkOperationBase.insert` | drivers | driver api node / BulkOperationBase | Supported | | `BulkOperationBase.raw` | drivers | driver api node / BulkOperationBase | Supported | | `ChangeStream.close-1` | drivers | driver api node / ChangeStream | Supported | | `ChangeStream.hasNext` | drivers | driver api node / ChangeStream | Supported | | `ChangeStream.next` | drivers | driver api node / ChangeStream | Supported | | `ChangeStream.resumeToken` | drivers | driver api node / ChangeStream | Supported | | `ChangeStream.stream` | drivers | driver api node / ChangeStream | Supported | | `ChangeStream.tryNext` | drivers | driver api node / ChangeStream | Supported | | `ClientSession.abortTransaction` | drivers | driver api node / ClientSession | Supported | | `ClientSession.advanceClusterTime` | drivers | driver api node / ClientSession | Supported | | `ClientSession.advanceOperationTime` | drivers | driver api node / ClientSession | Supported | | `ClientSession.clusterTime` | drivers | driver api node / ClientSession | Supported | | `ClientSession.commitTransaction` | drivers | driver api node / ClientSession | Supported | | `ClientSession.endSession` | drivers | driver api node / ClientSession | Supported | | `ClientSession.operationTime` | drivers | driver api node / ClientSession | Supported | | `ClientSession.startTransaction` | drivers | driver api node / ClientSession | Supported | | `ClientSession.withTransaction` | drivers | driver api node / ClientSession | Supported | | `Collection.aggregate` | drivers | driver api node / Collection | Supported | | `Collection.bulkWrite` | drivers | driver api node / Collection | Supported | | `Collection.count` | drivers | driver api node / Collection | Supported | | `Collection.countDocuments` | drivers | driver api node / Collection | Supported | | `Collection.createIndex` | drivers | driver api node / Collection | Supported | | `Collection.createIndexes` | drivers | driver api node / Collection | Supported | | `Collection.createSearchIndex` | drivers | driver api node / Collection | Not tested | | `Collection.createSearchIndexes` | drivers | driver api node / Collection | Not tested | | `Collection.deleteMany` | drivers | driver api node / Collection | Supported | | `Collection.deleteOne` | drivers | driver api node / Collection | Supported | | `Collection.distinct` | drivers | driver api node / Collection | Supported | | `Collection.drop` | drivers | driver api node / Collection | Supported | | `Collection.dropIndex` | drivers | driver api node / Collection | Supported | | `Collection.dropIndexes` | drivers | driver api node / Collection | Supported | | `Collection.dropSearchIndex` | drivers | driver api node / Collection | Not tested | | `Collection.estimatedDocumentCount` | drivers | driver api node / Collection | Supported | | `Collection.find` | drivers | driver api node / Collection | Supported | | `Collection.findOne` | drivers | driver api node / Collection | Supported | | `Collection.findOneAndDelete` | drivers | driver api node / Collection | Supported | | `Collection.findOneAndReplace` | drivers | driver api node / Collection | Supported | | `Collection.findOneAndUpdate` | drivers | driver api node / Collection | Supported | | `Collection.indexes` | drivers | driver api node / Collection | Supported | | `Collection.indexExists` | drivers | driver api node / Collection | Supported | | `Collection.indexInformation` | drivers | driver api node / Collection | Supported | | `Collection.initializeOrderedBulkOp` | drivers | driver api node / Collection | Supported | | `Collection.initializeUnorderedBulkOp` | drivers | driver api node / Collection | Supported | | `Collection.insertMany` | drivers | driver api node / Collection | Supported | | `Collection.insertOne` | drivers | driver api node / Collection | Supported | | `Collection.isCapped` | drivers | driver api node / Collection | Supported | | `Collection.listIndexes` | drivers | driver api node / Collection | Supported | | `Collection.listSearchIndexes` | drivers | driver api node / Collection | Not tested | | `Collection.options` | drivers | driver api node / Collection | Supported | | `Collection.rename` | drivers | driver api node / Collection | Supported | | `Collection.replaceOne` | drivers | driver api node / Collection | Supported | | `Collection.updateMany` | drivers | driver api node / Collection | Supported | | `Collection.updateOne` | drivers | driver api node / Collection | Supported | | `Collection.updateSearchIndex` | drivers | driver api node / Collection | Not tested | | `Collection.watch` | drivers | driver api node / Collection | Supported | | `Db.aggregate` | drivers | driver api node / Db | Supported | | `Db.collection` | drivers | driver api node / Db | Supported | | `Db.collections` | drivers | driver api node / Db | Supported | | `Db.command` | drivers | driver api node / Db | Supported | | `Db.createCollection` | drivers | driver api node / Db | Supported | | `Db.createIndex` | drivers | driver api node / Db | Supported | | `Db.dropCollection` | drivers | driver api node / Db | Supported | | `Db.dropDatabase` | drivers | driver api node / Db | Supported | | `Db.indexInformation` | drivers | driver api node / Db | Supported | | `Db.listCollections` | drivers | driver api node / Db | Supported | | `Db.profilingLevel` | drivers | driver api node / Db | Supported | | `Db.removeUser` | drivers | driver api node / Db | Supported | | `Db.renameCollection` | drivers | driver api node / Db | Supported | | `Db.runCursorCommand` | drivers | driver api node / Db | Supported | | `Db.setProfilingLevel` | drivers | driver api node / Db | Supported | | `Db.stats` | drivers | driver api node / Db | Supported | | `Db.watch` | drivers | driver api node / Db | Supported | | `FindCursor.addQueryModifier` | drivers | driver api node / FindCursor | Supported | | `FindCursor.allowDiskUse` | drivers | driver api node / FindCursor | Supported | | `FindCursor.clone` | drivers | driver api node / FindCursor | Supported | | `FindCursor.collation` | drivers | driver api node / FindCursor | Supported | | `FindCursor.comment` | drivers | driver api node / FindCursor | Supported | | `FindCursor.count` | drivers | driver api node / FindCursor | Supported | | `FindCursor.explain` | drivers | driver api node / FindCursor | Supported | | `FindCursor.filter` | drivers | driver api node / FindCursor | Supported | | `FindCursor.hint` | drivers | driver api node / FindCursor | Supported | | `FindCursor.limit` | drivers | driver api node / FindCursor | Supported | | `FindCursor.max` | drivers | driver api node / FindCursor | Supported | | `FindCursor.maxAwaitTimeMS` | drivers | driver api node / FindCursor | Supported | | `FindCursor.maxTimeMS` | drivers | driver api node / FindCursor | Supported | | `FindCursor.min` | drivers | driver api node / FindCursor | Supported | | `FindCursor.project` | drivers | driver api node / FindCursor | Supported | | `FindCursor.returnKey` | drivers | driver api node / FindCursor | Supported | | `FindCursor.showRecordId` | drivers | driver api node / FindCursor | Supported | | `FindCursor.skip` | drivers | driver api node / FindCursor | Supported | | `FindCursor.sort` | drivers | driver api node / FindCursor | Supported | | `GridFSBucket.delete` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.drop` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.find` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.openDownloadStream` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.openDownloadStreamByName` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.openUploadStream` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.openUploadStreamWithId` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucket.rename` | drivers | driver api node / GridFSBucket | Supported | | `GridFSBucketReadStream.abort` | drivers | driver api node / GridFSBucketReadStream | Supported | | `GridFSBucketReadStream.end` | drivers | driver api node / GridFSBucketReadStream | Supported | | `GridFSBucketReadStream.start` | drivers | driver api node / GridFSBucketReadStream | Supported | | `GridFSBucketWriteStream.abort` | drivers | driver api node / GridFSBucketWriteStream | Supported | | `MongoClient.close` | drivers | driver api node / MongoClient | Supported | | `MongoClient.connect` | drivers | driver api node / MongoClient | Supported | | `MongoClient.startSession` | drivers | driver api node / MongoClient | Supported | | `MongoClient.watch` | drivers | driver api node / MongoClient | Supported | | `abortTransaction.autocommit` | transactions | command options / abortTransaction | Supported | | `abortTransaction.comment` | transactions | command options / abortTransaction | Supported | | `abortTransaction.txnNumber` | transactions | command options / abortTransaction | Supported | | `abortTransaction.writeConcern` | transactions | command options / abortTransaction | Supported | | `aggregate.aggregate` | aggregation | command options / aggregate | Supported | | `aggregate.allowDiskUse` | aggregation | command options / aggregate | Supported | | `aggregate.bypassDocumentValidation` | aggregation | command options / aggregate | Supported | | `aggregate.collation` | aggregation | command options / aggregate | Supported | | `aggregate.comment` | aggregation | command options / aggregate | Supported | | `aggregate.cursor` | aggregation | command options / aggregate | Supported | | `aggregate.explain` | aggregation | command options / aggregate | Supported | | `aggregate.hint` | aggregation | command options / aggregate | Supported | | `aggregate.let` | aggregation | command options / aggregate | Supported | | `aggregate.maxTimeMS` | aggregation | command options / aggregate | Supported | | `aggregate.pipeline` | aggregation | command options / aggregate | Supported | | `aggregate.readConcern` | aggregation | command options / aggregate | Supported | | `aggregate.writeConcern` | aggregation | command options / aggregate | Supported | | `collMod.cappedMax` | admin | command options / collMod | Supported | | `collMod.cappedSize` | admin | command options / collMod | Supported | | `collMod.changeStreamPreAndPostImages` | admin | command options / collMod | Supported | | `collMod.expireAfterSeconds` | admin | command options / collMod | Supported | | `collMod.index` | admin | command options / collMod | Supported | | `collMod.index.expireAfterSeconds` | admin | command options / collMod | Supported | | `collMod.index.hidden` | admin | command options / collMod | Supported | | `collMod.index.keyPattern` | admin | command options / collMod | Supported | | `collMod.index.name` | admin | command options / collMod | Supported | | `collMod.index.prepareUnique` | admin | command options / collMod | Supported | | `collMod.index.unique` | admin | command options / collMod | Supported | | `collMod.pipeline` | admin | command options / collMod | Supported | | `collMod.validationAction` | admin | command options / collMod | Supported | | `collMod.validationLevel` | admin | command options / collMod | Supported | | `collMod.validator` | admin | command options / collMod | Supported | | `collMod.viewOn` | admin | command options / collMod | Supported | | `collStats.collStats` | admin | command options / collStats | Supported | | `collStats.scale` | admin | command options / collStats | Supported | | `commitTransaction.autocommit` | transactions | command options / commitTransaction | Supported | | `commitTransaction.comment` | transactions | command options / commitTransaction | Supported | | `commitTransaction.txnNumber` | transactions | command options / commitTransaction | Supported | | `commitTransaction.writeConcern` | transactions | command options / commitTransaction | Supported | | `count.collation` | queries | command options / count | Supported | | `count.comment` | queries | command options / count | Supported | | `count.count` | queries | command options / count | Supported | | `count.hint` | queries | command options / count | Supported | | `count.limit` | queries | command options / count | Supported | | `count.maxTimeMS` | queries | command options / count | Supported | | `count.query` | queries | command options / count | Supported | | `count.readConcern` | queries | command options / count | Supported | | `count.skip` | queries | command options / count | Supported | | `create.capped` | admin | command options / create | Supported | | `create.changeStreamPreAndPostImages` | admin | command options / create | Supported | | `create.clusteredIndex` | admin | command options / create | Supported | | `create.comment` | admin | command options / create | Supported | | `create.create` | admin | command options / create | Supported | | `create.encryptedFields` | admin | command options / create | Supported | | `create.expireAfterSeconds` | admin | command options / create | Supported | | `create.indexOptionDefaults` | admin | command options / create | Supported | | `create.max` | admin | command options / create | Supported | | `create.pipeline` | admin | command options / create | Supported | | `create.size` | admin | command options / create | Supported | | `create.storageEngine` | admin | command options / create | Supported | | `create.timeseries.bucketMaxSpanSeconds` | admin | command options / create | Supported | | `create.timeseries.bucketRoundingSeconds` | admin | command options / create | Supported | | `create.timeseries.granularity` | admin | command options / create | Supported | | `create.timeseries.metaField` | admin | command options / create | Supported | | `create.timeseries.timeField` | admin | command options / create | Supported | | `create.validationAction` | admin | command options / create | Supported | | `create.validationLevel` | admin | command options / create | Supported | | `create.validator` | admin | command options / create | Supported | | `create.viewOn` | admin | command options / create | Supported | | `create.writeConcern` | admin | command options / create | Supported | | `createIndexes.comment` | indexes | command options / createIndexes | Supported | | `createIndexes.commitQuorum` | indexes | command options / createIndexes | Supported | | `createIndexes.createIndexes` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].2dsphereIndexVersion` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].bits` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].collation` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].default_language` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].expireAfterSeconds` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].hidden` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].key` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].language_override` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].max` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].min` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].name` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].partialFilterExpression` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].sparse` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].storageEngine` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].textIndexVersion` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].unique` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].weights` | indexes | command options / createIndexes | Supported | | `createIndexes.indexes[].wildcardProjection` | indexes | command options / createIndexes | Supported | | `createIndexes.writeConcern` | indexes | command options / createIndexes | Supported | | `dbStats.dbStats` | admin | command options / dbStats | Supported | | `dbStats.freeStorage` | admin | command options / dbStats | Supported | | `dbStats.scale` | admin | command options / dbStats | Supported | | `delete.comment` | writes | command options / delete | Supported | | `delete.delete` | writes | command options / delete | Supported | | `delete.deletes` | writes | command options / delete | Supported | | `delete.deletes[].collation` | writes | command options / delete | Supported | | `delete.deletes[].hint` | writes | command options / delete | Supported | | `delete.deletes[].limit` | writes | command options / delete | Supported | | `delete.deletes[].q` | writes | command options / delete | Supported | | `delete.let` | writes | command options / delete | Supported | | `delete.maxTimeMS` | writes | command options / delete | Supported | | `delete.ordered` | writes | command options / delete | Supported | | `delete.writeConcern` | writes | command options / delete | Supported | | `distinct.collation` | queries | command options / distinct | Supported | | `distinct.comment` | queries | command options / distinct | Supported | | `distinct.distinct` | queries | command options / distinct | Supported | | `distinct.key` | queries | command options / distinct | Supported | | `distinct.query` | queries | command options / distinct | Supported | | `distinct.readConcern` | queries | command options / distinct | Supported | | `drop.comment` | admin | command options / drop | Supported | | `drop.drop` | admin | command options / drop | Supported | | `drop.writeConcern` | admin | command options / drop | Supported | | `dropDatabase.comment` | admin | command options / dropDatabase | Supported | | `dropDatabase.writeConcern` | admin | command options / dropDatabase | Supported | | `dropIndexes.comment` | indexes | command options / dropIndexes | Supported | | `dropIndexes.dropIndexes` | indexes | command options / dropIndexes | Supported | | `dropIndexes.index` | indexes | command options / dropIndexes | Supported | | `dropIndexes.writeConcern` | indexes | command options / dropIndexes | Supported | | `explain.comment` | queries | command options / explain | Supported | | `explain.explain` | queries | command options / explain | Supported | | `explain.verbosity` | queries | command options / explain | Supported | | `find.allowDiskUse` | queries | command options / find | Supported | | `find.allowPartialResults` | queries | command options / find | Supported | | `find.awaitData` | queries | command options / find | Supported | | `find.batchSize` | queries | command options / find | Supported | | `find.collation` | queries | command options / find | Supported | | `find.comment` | queries | command options / find | Supported | | `find.filter` | queries | command options / find | Supported | | `find.find` | queries | command options / find | Supported | | `find.hint` | queries | command options / find | Supported | | `find.let` | queries | command options / find | Supported | | `find.limit` | queries | command options / find | Supported | | `find.max` | queries | command options / find | Supported | | `find.maxTimeMS` | queries | command options / find | Supported | | `find.min` | queries | command options / find | Supported | | `find.noCursorTimeout` | queries | command options / find | Supported | | `find.projection` | queries | command options / find | Supported | | `find.readConcern` | queries | command options / find | Supported | | `find.returnKey` | queries | command options / find | Supported | | `find.showRecordId` | queries | command options / find | Supported | | `find.singleBatch` | queries | command options / find | Supported | | `find.skip` | queries | command options / find | Supported | | `find.sort` | queries | command options / find | Supported | | `find.tailable` | queries | command options / find | Supported | | `findAndModify.arrayFilters` | writes | command options / findAndModify | Supported | | `findAndModify.bypassDocumentValidation` | writes | command options / findAndModify | Supported | | `findAndModify.collation` | writes | command options / findAndModify | Supported | | `findAndModify.comment` | writes | command options / findAndModify | Supported | | `findAndModify.fields` | writes | command options / findAndModify | Supported | | `findAndModify.findAndModify` | writes | command options / findAndModify | Supported | | `findAndModify.hint` | writes | command options / findAndModify | Supported | | `findAndModify.let` | writes | command options / findAndModify | Supported | | `findAndModify.maxTimeMS` | writes | command options / findAndModify | Supported | | `findAndModify.new` | writes | command options / findAndModify | Supported | | `findAndModify.query` | writes | command options / findAndModify | Supported | | `findAndModify.remove` | writes | command options / findAndModify | Supported | | `findAndModify.sort` | writes | command options / findAndModify | Supported | | `findAndModify.update` | writes | command options / findAndModify | Supported | | `findAndModify.upsert` | writes | command options / findAndModify | Supported | | `findAndModify.writeConcern` | writes | command options / findAndModify | Supported | | `getMore.batchSize` | queries | command options / getMore | Supported | | `getMore.collection` | queries | command options / getMore | Supported | | `getMore.comment` | queries | command options / getMore | Supported | | `getMore.getMore` | queries | command options / getMore | Supported | | `getMore.maxTimeMS` | queries | command options / getMore | Supported | | `hello.client` | drivers | command options / hello | Supported | | `hello.comment` | drivers | command options / hello | Supported | | `hello.compression` | drivers | command options / hello | Supported | | `hello.saslSupportedMechs` | drivers | command options / hello | Supported | | `insert.bypassDocumentValidation` | writes | command options / insert | Supported | | `insert.comment` | writes | command options / insert | Supported | | `insert.documents` | writes | command options / insert | Supported | | `insert.insert` | writes | command options / insert | Supported | | `insert.maxTimeMS` | writes | command options / insert | Supported | | `insert.ordered` | writes | command options / insert | Supported | | `insert.writeConcern` | writes | command options / insert | Supported | | `killCursors.comment` | queries | command options / killCursors | Supported | | `killCursors.cursors` | queries | command options / killCursors | Supported | | `killCursors.killCursors` | queries | command options / killCursors | Supported | | `listCollections.authorizedCollections` | admin | command options / listCollections | Supported | | `listCollections.comment` | admin | command options / listCollections | Supported | | `listCollections.filter` | admin | command options / listCollections | Supported | | `listCollections.nameOnly` | admin | command options / listCollections | Supported | | `listDatabases.authorizedDatabases` | admin | command options / listDatabases | Supported | | `listDatabases.comment` | admin | command options / listDatabases | Supported | | `listDatabases.filter` | admin | command options / listDatabases | Supported | | `listDatabases.nameOnly` | admin | command options / listDatabases | Supported | | `listIndexes.comment` | indexes | command options / listIndexes | Supported | | `listIndexes.cursor.batchSize` | indexes | command options / listIndexes | Supported | | `listIndexes.listIndexes` | indexes | command options / listIndexes | Supported | | `mapReduce.bypassDocumentValidation` | aggregation | command options / mapReduce | Supported | | `mapReduce.collation` | aggregation | command options / mapReduce | Supported | | `mapReduce.comment` | aggregation | command options / mapReduce | Supported | | `mapReduce.finalize` | aggregation | command options / mapReduce | Supported | | `mapReduce.jsMode` | aggregation | command options / mapReduce | Supported | | `mapReduce.limit` | aggregation | command options / mapReduce | Supported | | `mapReduce.map` | aggregation | command options / mapReduce | Supported | | `mapReduce.mapReduce` | aggregation | command options / mapReduce | Supported | | `mapReduce.maxTimeMS` | aggregation | command options / mapReduce | Supported | | `mapReduce.out` | aggregation | command options / mapReduce | Supported | | `mapReduce.query` | aggregation | command options / mapReduce | Supported | | `mapReduce.reduce` | aggregation | command options / mapReduce | Supported | | `mapReduce.scope` | aggregation | command options / mapReduce | Supported | | `mapReduce.sort` | aggregation | command options / mapReduce | Supported | | `mapReduce.verbose` | aggregation | command options / mapReduce | Supported | | `mapReduce.writeConcern` | aggregation | command options / mapReduce | Supported | | `renameCollection.comment` | admin | command options / renameCollection | Supported | | `renameCollection.dropTarget` | admin | command options / renameCollection | Supported | | `renameCollection.renameCollection` | admin | command options / renameCollection | Supported | | `renameCollection.to` | admin | command options / renameCollection | Supported | | `renameCollection.writeConcern` | admin | command options / renameCollection | Supported | | `update.bypassDocumentValidation` | writes | command options / update | Supported | | `update.comment` | writes | command options / update | Supported | | `update.let` | writes | command options / update | Supported | | `update.maxTimeMS` | writes | command options / update | Supported | | `update.ordered` | writes | command options / update | Supported | | `update.update` | writes | command options / update | Supported | | `update.updates` | writes | command options / update | Supported | | `update.updates[].arrayFilters` | writes | command options / update | Supported | | `update.updates[].c` | writes | command options / update | Supported | | `update.updates[].collation` | writes | command options / update | Supported | | `update.updates[].hint` | writes | command options / update | Supported | | `update.updates[].multi` | writes | command options / update | Supported | | `update.updates[].q` | writes | command options / update | Supported | | `update.updates[].u` | writes | command options / update | Supported | | `update.updates[].upsert` | writes | command options / update | Supported | | `update.writeConcern` | writes | command options / update | Supported | | `validate.checkBSONConformance` | admin | command options / validate | Supported | | `validate.full` | admin | command options / validate | Supported | | `validate.metadata` | admin | command options / validate | Supported | | `validate.repair` | admin | command options / validate | Supported | | `validate.validate` | admin | command options / validate | Supported | | `$` | queries | projection operators | Supported | | `$elemMatch` | queries | projection operators | Supported | | `$meta` | queries | projection operators | Supported | | `$slice` | queries | projection operators | Supported | | `aggregation expressions in find projection` | queries | projection operators | Supported | | `gridfs.grid_file.GridIn.abort` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridIn.close` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridIn.write` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridIn.writelines` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridOut.close` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridOut.read` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridOut.readchunk` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.grid_file.GridOut.writelines` | drivers | driver api pymongo / grid_file | Supported | | `gridfs.GridFS.delete` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.exists` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.find` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.find_one` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.get` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.get_last_version` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.get_version` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.list` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.new_file` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFS.put` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.delete` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.delete_by_name` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.download_to_stream` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.download_to_stream_by_name` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.find` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.open_download_stream` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.open_download_stream_by_name` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.open_upload_stream` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.open_upload_stream_with_id` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.rename` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.rename_by_name` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.upload_from_stream` | drivers | driver api pymongo / GridFS | Supported | | `gridfs.GridFSBucket.upload_from_stream_with_id` | drivers | driver api pymongo / GridFS | Supported | | `pymongo.change_stream.ChangeStream.close` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ChangeStream.next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ChangeStream.resume_token` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ChangeStream.try_next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ClusterChangeStream.close` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ClusterChangeStream.next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ClusterChangeStream.resume_token` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.ClusterChangeStream.try_next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.CollectionChangeStream.close` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.CollectionChangeStream.next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.CollectionChangeStream.resume_token` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.CollectionChangeStream.try_next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.DatabaseChangeStream.close` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.DatabaseChangeStream.next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.DatabaseChangeStream.resume_token` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.change_stream.DatabaseChangeStream.try_next` | drivers | driver api pymongo / ChangeStream | Supported | | `pymongo.client_session.ClientSession.abort_transaction` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.advance_cluster_time` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.advance_operation_time` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.cluster_time` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.commit_transaction` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.end_session` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.operation_time` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.start_transaction` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.client_session.ClientSession.with_transaction` | drivers | driver api pymongo / ClientSession | Supported | | `pymongo.collection.Collection.aggregate` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.aggregate_raw_batches` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.bulk_write` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.count_documents` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.create_index` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.create_indexes` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.create_search_index` | drivers | driver api pymongo / Collection | Not tested | | `pymongo.collection.Collection.create_search_indexes` | drivers | driver api pymongo / Collection | Not tested | | `pymongo.collection.Collection.delete_many` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.delete_one` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.distinct` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.drop` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.drop_index` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.drop_indexes` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.drop_search_index` | drivers | driver api pymongo / Collection | Not tested | | `pymongo.collection.Collection.estimated_document_count` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.find` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.find_one` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.find_one_and_delete` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.find_one_and_replace` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.find_one_and_update` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.find_raw_batches` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.index_information` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.insert_many` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.insert_one` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.list_indexes` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.list_search_indexes` | drivers | driver api pymongo / Collection | Not tested | | `pymongo.collection.Collection.options` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.rename` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.replace_one` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.update_many` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.update_one` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.update_search_index` | drivers | driver api pymongo / Collection | Not tested | | `pymongo.collection.Collection.watch` | drivers | driver api pymongo / Collection | Supported | | `pymongo.collection.Collection.with_options` | drivers | driver api pymongo / Collection | Supported | | `pymongo.command_cursor.CommandCursor.close` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.CommandCursor.next` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.CommandCursor.to_list` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.CommandCursor.try_next` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.RawBatchCommandCursor.close` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.RawBatchCommandCursor.next` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.RawBatchCommandCursor.to_list` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.command_cursor.RawBatchCommandCursor.try_next` | drivers | driver api pymongo / CommandCursor | Supported | | `pymongo.cursor.Cursor.add_option` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.allow_disk_use` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.batch_size` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.clone` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.close` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.collation` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.comment` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.distinct` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.explain` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.hint` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.limit` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.max` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.max_await_time_ms` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.max_scan` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.max_time_ms` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.min` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.next` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.remove_option` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.rewind` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.skip` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.sort` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.to_list` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.cursor.Cursor.where` | drivers | driver api pymongo / Cursor | Supported | | `pymongo.database.Database.aggregate` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.command` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.create_collection` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.cursor_command` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.dereference` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.drop_collection` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.list_collection_names` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.list_collections` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.validate_collection` | drivers | driver api pymongo / Database | Supported | | `pymongo.database.Database.watch` | drivers | driver api pymongo / Database | Supported | | `pymongo.mongo_client.MongoClient.close` | drivers | driver api pymongo / MongoClient | Supported | | `pymongo.mongo_client.MongoClient.drop_database` | drivers | driver api pymongo / MongoClient | Supported | | `pymongo.mongo_client.MongoClient.list_database_names` | drivers | driver api pymongo / MongoClient | Supported | | `pymongo.mongo_client.MongoClient.list_databases` | drivers | driver api pymongo / MongoClient | Supported | | `pymongo.mongo_client.MongoClient.server_info` | drivers | driver api pymongo / MongoClient | Supported | | `pymongo.mongo_client.MongoClient.start_session` | drivers | driver api pymongo / MongoClient | Supported | | `pymongo.mongo_client.MongoClient.watch` | drivers | driver api pymongo / MongoClient | Supported | | `$all` | queries | query operators / array | Supported | | `$and` | queries | query operators / logical | Supported | | `$bitsAllClear` | queries | query operators / bitwise | Supported | | `$bitsAllSet` | queries | query operators / bitwise | Supported | | `$bitsAnyClear` | queries | query operators / bitwise | Supported | | `$bitsAnySet` | queries | query operators / bitwise | Supported | | `$box` | queries | query operators / geospatial | Supported | | `$center` | queries | query operators / geospatial | Supported | | `$centerSphere` | queries | query operators / geospatial | Supported | | `$elemMatch` | queries | query operators / array | Supported | | `$eq` | queries | query operators / comparison | Supported | | `$exists` | queries | query operators / element | Supported | | `$expr` | queries | query operators / evaluation | Supported | | `$geoIntersects` | queries | query operators / geospatial | Supported | | `$geometry` | queries | query operators / geospatial | Supported | | `$geoWithin` | queries | query operators / geospatial | Supported | | `$gt` | queries | query operators / comparison | Supported | | `$gte` | queries | query operators / comparison | Supported | | `$in` | queries | query operators / comparison | Supported | | `$jsonSchema` | queries | query operators / evaluation | Supported | | `$lt` | queries | query operators / comparison | Supported | | `$lte` | queries | query operators / comparison | Supported | | `$maxDistance` | queries | query operators / geospatial | Supported | | `$minDistance` | queries | query operators / geospatial | Supported | | `$mod` | queries | query operators / evaluation | Supported | | `$ne` | queries | query operators / comparison | Supported | | `$near` | queries | query operators / geospatial | Supported | | `$nearSphere` | queries | query operators / geospatial | Supported | | `$nin` | queries | query operators / comparison | Supported | | `$nor` | queries | query operators / logical | Supported | | `$not` | queries | query operators / logical | Supported | | `$or` | queries | query operators / logical | Supported | | `$polygon` | queries | query operators / geospatial | Supported | | `$regex` | queries | query operators / evaluation | Supported | | `$size` | queries | query operators / array | Supported | | `$text` | queries | query operators / evaluation | Supported | | `$type` | queries | query operators / element | Supported | | `$where` | queries | query operators / evaluation | Supported | | `afterClusterTime` | transactions | read concern | Supported | | `level "available"` | transactions | read concern | Supported | | `level "linearizable"` | transactions | read concern | Supported | | `level "local"` | transactions | read concern | Supported | | `level "majority"` | transactions | read concern | Supported | | `level "snapshot"` | transactions | read concern | Supported | | `hedge` | transactions | read preference | Supported | | `maxStalenessSeconds` | transactions | read preference | Supported | | `nearest` | transactions | read preference | Supported | | `primary` | transactions | read preference | Supported | | `primaryPreferred` | transactions | read preference | Supported | | `secondary` | transactions | read preference | Supported | | `secondaryPreferred` | transactions | read preference | Supported | | `tag sets` | transactions | read preference | Supported | | `$clusterTime` | drivers | driver protocol | Supported | | `causal consistency` | drivers | driver protocol | Supported | | `lsid (logical session id)` | drivers | driver protocol | Supported | | `retryWrites` | drivers | driver protocol | Supported | | `txnNumber (retryable writes)` | drivers | driver protocol | Supported | | `$meta textScore (sort)` | queries | sort and hint specifications | Supported | | `$natural (hint)` | queries | sort and hint specifications | Supported | | `$natural (sort)` | queries | sort and hint specifications | Supported | | `apiDeprecationErrors` | drivers | driver protocol | Supported | | `apiStrict` | drivers | driver protocol | Supported | | `apiVersion` | drivers | driver protocol | Supported | | `$addFields` | aggregation | aggregation stages | Supported | | `$bucket` | aggregation | aggregation stages | Supported | | `$bucketAuto` | aggregation | aggregation stages | Supported | | `$changeStream` | aggregation | aggregation stages | Supported | | `$changeStreamSplitLargeEvent` | aggregation | aggregation stages | Supported | | `$collStats` | aggregation | aggregation stages | Supported | | `$count` | aggregation | aggregation stages | Supported | | `$currentOp` | aggregation | aggregation stages | Supported | | `$densify` | aggregation | aggregation stages | Supported | | `$documents` | aggregation | aggregation stages | Supported | | `$facet` | aggregation | aggregation stages | Supported | | `$fill` | aggregation | aggregation stages | Supported | | `$geoNear` | aggregation | aggregation stages | Supported | | `$graphLookup` | aggregation | aggregation stages | Supported | | `$group` | aggregation | aggregation stages | Supported | | `$indexStats` | aggregation | aggregation stages | Supported | | `$limit` | aggregation | aggregation stages | Supported | | `$listLocalSessions` | aggregation | aggregation stages | Supported | | `$listSearchIndexes` | aggregation | aggregation stages | Not tested | | `$listSessions` | aggregation | aggregation stages | Supported | | `$lookup` | aggregation | aggregation stages | Supported | | `$match` | aggregation | aggregation stages | Supported | | `$merge` | aggregation | aggregation stages | Supported | | `$out` | aggregation | aggregation stages | Supported | | `$planCacheStats` | aggregation | aggregation stages | Supported | | `$project` | aggregation | aggregation stages | Supported | | `$queryStats` | aggregation | aggregation stages | Supported | | `$redact` | aggregation | aggregation stages | Supported | | `$replaceRoot` | aggregation | aggregation stages | Supported | | `$replaceWith` | aggregation | aggregation stages | Supported | | `$sample` | aggregation | aggregation stages | Supported | | `$search` | aggregation | aggregation stages | Not tested | | `$searchMeta` | aggregation | aggregation stages | Not tested | | `$set` | aggregation | aggregation stages | Supported | | `$setWindowFields` | aggregation | aggregation stages | Supported | | `$skip` | aggregation | aggregation stages | Supported | | `$sort` | aggregation | aggregation stages | Supported | | `$sortByCount` | aggregation | aggregation stages | Supported | | `$unionWith` | aggregation | aggregation stages | Supported | | `$unset` | aggregation | aggregation stages | Supported | | `$unwind` | aggregation | aggregation stages | Supported | | `TLS/SSL transport encryption (tls=true; the default for mongodb+srv:// URIs)` | drivers | driver protocol | Supported | | `abortTransaction` | transactions | transactions | Supported | | `autocommit` | transactions | transactions | Supported | | `commitTransaction` | transactions | transactions | Supported | | `maxTimeMS (commitTransaction)` | transactions | transactions | Supported | | `startTransaction` | transactions | transactions | Supported | | `transactionLifetimeLimitSeconds` | transactions | transactions | Supported | | `TransientTransactionError` | transactions | transactions | Supported | | `$` | queries | update operators / Positional Update Operators | Supported | | `$[]` | queries | update operators / Positional Update Operators | Supported | | `$[]` | queries | update operators / Positional Update Operators | Supported | | `$addToSet` | queries | update operators / Array Update Operators | Supported | | `$bit` | queries | update operators / Bitwise Update Operators | Supported | | `$currentDate` | queries | update operators / Field Update Operators | Supported | | `$each` | queries | update operators / Array Update Modifiers | Supported | | `$inc` | queries | update operators / Field Update Operators | Supported | | `$max` | queries | update operators / Field Update Operators | Supported | | `$min` | queries | update operators / Field Update Operators | Supported | | `$mul` | queries | update operators / Field Update Operators | Supported | | `$pop` | queries | update operators / Array Update Operators | Supported | | `$position` | queries | update operators / Array Update Modifiers | Supported | | `$pull` | queries | update operators / Array Update Operators | Supported | | `$pullAll` | queries | update operators / Array Update Operators | Supported | | `$push` | queries | update operators / Array Update Operators | Supported | | `$rename` | queries | update operators / Field Update Operators | Supported | | `$set` | queries | update operators / Field Update Operators | Supported | | `$setOnInsert` | queries | update operators / Field Update Operators | Supported | | `$slice` | queries | update operators / Array Update Modifiers | Supported | | `$sort` | queries | update operators / Array Update Modifiers | Supported | | `$unset` | queries | update operators / Field Update Operators | Supported | | `j` | writes | write concern | Supported | | `w: "majority"` | writes | write concern | Supported | | `w: ` | writes | write concern | Supported | | `w: ` | writes | write concern | Supported | | `w: 0 (unacknowledged)` | writes | write concern | Supported | | `wtimeout` | writes | write concern | Supported | | `$addToSet` | aggregation | window functions | Supported | | `$avg` | aggregation | window functions | Supported | | `$bottom` | aggregation | window functions | Supported | | `$bottomN` | aggregation | window functions | Supported | | `$count` | aggregation | window functions | Supported | | `$first` | aggregation | window functions | Supported | | `$firstN` | aggregation | window functions | Supported | | `$last` | aggregation | window functions | Supported | | `$lastN` | aggregation | window functions | Supported | | `$max` | aggregation | window functions | Supported | | `$maxN` | aggregation | window functions | Supported | | `$median` | aggregation | window functions | Supported | | `$min` | aggregation | window functions | Supported | | `$minN` | aggregation | window functions | Supported | | `$percentile` | aggregation | window functions | Supported | | `$push` | aggregation | window functions | Supported | | `$stdDevPop` | aggregation | window functions | Supported | | `$stdDevSamp` | aggregation | window functions | Supported | | `$sum` | aggregation | window functions | Supported | | `$top` | aggregation | window functions | Supported | | `$topN` | aggregation | window functions | Supported | | `OP_COMPRESSED` | drivers | driver protocol | Supported | | `OP_MSG` | drivers | driver protocol | Supported | | `OP_QUERY` | drivers | driver protocol | Supported | | `OP_REPLY` | drivers | driver protocol | Supported | ## Used in real applications To rank features by how much they matter, 10 open-source applications that use MongoDB were scanned on 2026-10-26. 238 features appear in at least one of them, in code that is not a test. Scanned: Rocket.Chat, parse-server, NodeBB, wekan, LibreChat, novu, appsmith, countly-server, payload, edx-platform. Note: The scan matches text in source files. It cannot tell a real query from a similarly shaped literal, and it misses queries built through a query builder or from variables, so its counts are a ranking aid, not a measurement of what an application needs. It is not used to make any claim about how much of an application is supported. ## The gaps that matter most | Gap | Features | Of which Partial | How many of the scanned applications use it | | --- | --- | --- | --- | | Collation (options and locales) | 14 | 14 | 5 of 10 | | Bson binary subtypes | 1 | 1 | not measured | ## What this audit does not tell you - Replica-set behaviour was tested on single-node replica sets only (no secondaries, no election, no majority across nodes). - **Atlas-only features** (`$search`, `$searchMeta`, `$vectorSearch`, Atlas Search index commands) cannot be differential-tested: mongod 7.0 itself rejects them. The engine's `$search` subset has no test against mongo:7.0. - **Drivers.** Only pymongo 4.19 and Node.js `mongodb` 7.7 were run. The inventory has no rows for the Java, Go, C#, Rust or other drivers; other language drivers that use the same server commands are expected to behave alike but that was not tested. - **"Covered" is not "exhaustively correct".** It means at least one passing differential test exercises the row and none fails; it does not mean every argument combination was compared. - **Docs v7.0 pages for later versions.** The v7.0 site also serves pages for `$rankFusion`, `$score`, `$scoreFusion`, `$querySettings`, `$listClusterCatalog`, `$toUUID`, `$serializeEJSON`, `$deserializeEJSON`, `$minMaxScaler`; mongod 7.0.45 rejects all of them ("Unrecognized pipeline stage" / "Unknown expression"), so they are not in the inventory. The query operator `$comment` is accepted by mongod 7.0.45 but has no 7.0 manual page, so it is not in the inventory either. - **Client-only driver members** (properties, option holders, SDAM views, enum constants, event-emitter plumbing) are proposed as exclusions by rule (`a rule in the audit's tooling`); each one was not individually checked for a hidden server dependency beyond that mapping. ## What is not counted 525 features of the MongoDB 7.0 surface are left out of every total above, because an application cannot reach them through a driver or they do not exist in MongoDB 7.0 Community. | Left out | Features | Why | | --- | --- | --- | | Client-only driver members | 269 | client-side only: the driver sends no request of its own for this member, so there is nothing for the engine to implement | | Client-side encryption helpers | 47 | client-side field-level encryption helper (libmongocrypt/KMS) | | Internal server-to-server commands | 133 | internal server-to-server command, not callable by applications | | Replication | 15 | replica-set administration/internal replication command, not issued by application code | | Sharding | 40 | sharding administration | | Audit (Enterprise/Atlas) | 3 | auditing is an Enterprise/Atlas feature | | Enterprise/Atlas-only authentication mechanisms | 4 | Enterprise/Atlas-only per the docs availability table (the MongoDB manual): not available in MongoDB Community | | Removed in 5.1 / 8.0-only | 3 | client-level bulkWrite needs the MongoDB 8.0 `bulkWrite` command (absent from the 7.0 manual) | | Undocumented commands | 7 | listed by listCommands on mongo 7.0.45 but absent from the 7.0 manual (undocumented, no driver API uses it) | | security.javascriptEnabled (startup option) | 1 | mongod startup configuration option (security.javascriptEnabled), not reachable through a driver | | Not producible / not in 7.0 Community | 2 | A4: $vectorSearch does not exist in MongoDB 7.0 Community (Atlas Vector Search only) | | Purely local driver member (founder-allowed, `apply_local_exclusions.py`) | 1 | `node:MongoClient.connect-2`: a second connect() on a connected client sends no request | ## How the numbers were reached Where the audit's own files disagree with each other, this is which one was used and why. These notes are part of the audit; they are here so no number on this page is unexplained. - an earlier coverage report reports 809 of 1245 covered = 65.0%, but the audit's feature list now computes 1253 of 1268 covered = 98.8% with the audit's own counting tool. The CSV was updated after that report (later gap-closing work), so this page uses the CSV and that report is out of date. The report also says 548 proposed exclusions; the founder-approved exclusions in the CSV number 525. - the audit's own counting tool counts 16 rows as covered although no comparison test against MongoDB exists for them (specification tests only). By this page's definition they are Not tested, so Supported is 1237 and not 1253. - the audit's list of open questions says TLS and X.509 are marked missing without a comparison test; in the audit's feature list they are now covered by comparison tests on the same certificates. The CSV is used; that bullet is not repeated on this page. - The two usage scans were taken at different commits of 8 of the 10 repositories (the application scan and the application scan record different commits). - The 'Our status' column of the application scan comes from an older compatibility table and is not used here; status always comes from the audit's feature list. ## Check your own code A result of Supported means at least one comparison against MongoDB 7.0 passes and none fails. It does not mean every combination of arguments was compared. Check the table above against the features your own application uses before you move it. # Security Source: https://docs.fenvix.dev/security/ How each database stays separate, how connections are protected, and what you control. ## One database, one set of files Every database is its own set of files on object storage. Nothing is shared between two databases, so isolation, restore and erase work on one database without touching another. ## Connections Connections use TLS. You sign in with a user name and password (SCRAM-SHA-256), the way you do with MongoDB. Users and roles belong to a database and are managed with the usual MongoDB commands. ## Data at rest Data is stored encrypted in object storage, in the region you chose when you created the database. The region is fixed for the life of the database. ## Your data, your control You can export a whole database in a format `mongorestore` imports, restore one database to an earlier point in time, and erase one database completely. Erasing deletes every file of the database. See [Commands](https://docs.fenvix.dev/commands/). ## The console You sign in to the console with Google, GitHub or a link sent to your email. Scripts use API keys, which are stored as hashes. # Authentication Source: https://docs.fenvix.dev/api/authentication/ Public API keys — their shape, their two roles, expiry, the organization header, revocation and rate limits. The public API manages your organization from code: databases, their users and network allowlists, API keys, and the usage you bill on. Every request carries a key: ```text Authorization: Bearer fvx_<43 characters> ``` A key is `fvx_` followed by 32 random bytes in base64url — 43 characters, 256 bits. A key belongs to **one organization** and has **one role**, and it only ever reaches that organization: ids of another organization's databases, users, keys or operations answer `404`, exactly like ids that do not exist. The console's own keys (`fnx_…`) do not work here, and `fvx_` keys do not work on the console's routes. ## The two shell variables Every example in this section uses these two. Keep the key in a secret store and read it from there; a key written in a command ends up in your shell history. ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` Answers are JSON, and every answer — errors included — carries an `X-Request-Id` header. ## Get your first key The first key is made by a person who is an owner or admin of the organization. A key cannot make the first one. 1. Sign in to the console as an owner or admin of the organization. 2. Do not use the console's **API keys** page for this. It makes `fnx_` keys, which the public API refuses with `401`. Public keys start with `fvx_`. 3. Make the first `fvx_` key with one request to `POST /api-keys`. It is authenticated with your signed-in console session instead of a key, and it names the organization with `X-Fenvix-Workspace`: ```bash curl -sS -X POST "$FENVIX_API/api-keys" \ -H "Authorization: Bearer $FENVIX_SESSION_TOKEN" \ -H "X-Fenvix-Workspace: " \ -H "Content-Type: application/json" \ -d '{"name":"first key","role":"admin"}' ``` 4. Copy `token` from the answer and store it. It is shown once and never again. Keep the first key safe. It stops working if the person who made it leaves the organization or drops below admin (see [Revocation](#revocation)). ## The two roles A key's role is applied exactly as the console applies an organization role to a person. | Role | Acts like | Can do | | --- | --- | --- | | `admin` | an organization **admin** | everything the public API offers, including creating `read_only` keys and revoking keys | | `read_only` | an organization **member** | every `GET` except listing API keys; every change answers `403` | Two rules are worth knowing before you design your automation: - **Only a person creates an `admin` key.** An owner or admin signed in to the console can; a key cannot. A key that tries gets `403`. So a stolen key cannot mint a stronger one. - **An `admin` key can create `read_only` keys**, which is how you hand narrower rights to a service. ## Expiry `expiresAt` is optional and may be at most **3 years** ahead. An expired key answers `401`, like a key that was never valid. A key created *by a key* may never outlive its creator: if the creating key expires, `expiresAt` is **required** on the new key and must be on or before the creator's expiry, otherwise the answer is `400` with `field: "expiresAt"`. ## How many keys At most **100 active keys** per organization. Revoked and expired keys do not count; the 101st active key is a `409`. ## Naming the organization | Caller | Header | | --- | --- | | A key (`fvx_…`) | Not needed. The key names its own organization. Sending `X-Fenvix-Workspace` with a *different* organization is a `404`. | | A console session | **Required**: `X-Fenvix-Workspace: `. There is no default organization, and without it the answer is `400`. | A console session is accepted on the key routes (`/api-keys`) only — so the first key can be made, because the console has no page for public keys yet. Every other route takes keys only. ## Revocation ```bash curl -sS -X DELETE "$FENVIX_API/api-keys/$KEY_ID" \ -H "Authorization: Bearer $FENVIX_KEY" ``` - It takes effect on the **next** request. Revoking twice changes nothing. - **Keys made by the revoked key are revoked with it** — and keys made by those, and so on down the chain. - A revoked or expired key is refused with `401`, and the refusal is written to the organization's audit log. Some keys are revoked without anyone calling that route. This is enforced in the database, so it holds however the change is made: | What happens | What is revoked | | --- | --- | | A person leaves the organization, is removed from it, or their account is deleted | the **`admin`** keys they created in it | | A person's role drops below admin (owner or admin to member) | the **`admin`** keys they created in it | | A key is revoked, by anyone or by one of the rules above | every key it created, and so on down | `read_only` keys a person created stay when that person leaves or is demoted; an owner or admin can revoke them. An owner who becomes an admin keeps their keys. When a whole organization is deleted, its keys go with it and nothing is recorded. Note: An `admin` key is as strong as an organization admin. If one leaks, revoke it: every key it made is revoked along with it. ## What is recorded The key itself is never stored, logged or shown again — only its SHA-256 and its display prefix (`fvx_` and the next 8 characters, which is how keys are told apart in a list). The `Authorization` header is redacted in logs, and refusals log the reason only. The organization's audit log records: | Event | When | | --- | --- | | `api_key.public.create` | a key is created (its name, role and expiry) | | `api_key.public.revoke` | a key is revoked (with the reason when a rule did it: `creator_removed`, `creator_demoted`, `creator_revoked`, `not_delivered`) | | `api_key.public.auth_failed` | a revoked or expired key was used (with the method and path) | | `api_key.public.denied` | a `read_only` key tried to change something | Changes made with a key are recorded with the key's id, like the console's own audit rows. The two refusal events are written **at most once a minute per key**; the refusals in between are counted, not lost, and the count appears in the next row, or in a summary row once the key goes quiet. ## Rate limits | Limit | Default | Applies to | | --- | --- | --- | | Per key | **120 requests a minute** | every key, on top of the organization's own limit | | Per address, failed or missing keys | 30 a minute | wrong, malformed or missing keys — shared with failed console sign-ins | | Per address, keys known to be valid | 600 a minute | a key the server instance created, or saw work in the last 15 minutes | Database user routes have their own, smaller limits, as on the console. Over a limit, the answer is `429` with `Retry-After` in **seconds**. Wait that long and retry — see [Errors](https://docs.fenvix.dev/api/errors/). Two details that matter when several services share one outbound address (a NAT, a shared CI runner): - Once an address is over the failed-key limit, a key is refused with `429` **before it is looked up**, so a flood of made-up keys costs no database work. - A key the instance already knows to be valid is still looked up, on the separate and higher per-address budget, so other traffic from the same address does not lock out a working key. A valid key the instance has not seen before, used from an address that is already locked out, waits like any other until the minute is over. The lookup still decides: a revoked key is refused at once. Note: The rate limiter is held in memory by each running instance of the service, so with several instances the effective limit is a multiple of the setting. Do not build anything that depends on the exact number; depend on `429` and `Retry-After`. ## What is not in this version Fork, restore, export, tags, keep-awake, billing and invoices, the overview, the data explorer, network blocks and members are on the console only. The public API sends no CORS headers for other origins, so call it from a server, not from a browser. # Errors Source: https://docs.fenvix.dev/api/errors/ The shape of an error, every code the public API can answer, what causes it and what to do about it. Every failure has the same shape, the same one the rest of the service uses: ```json { "error": { "code": "validation_failed", "message": "name must be 3 to 48 lowercase letters, numbers or dashes", "field": "name" } } ``` - `code` is one of the eight codes below. Branch on `code`, never on `message`. - `message` is for a person to read. It can change. - `field` is present when one part of the request is at fault, and names it: `name`, `entries[2]`, `expiresAt`, `month`, and so on. ## The codes | Code | HTTP | What it means | What to do | | --- | --- | --- | --- | | `validation_failed` | 400 | The request is not valid: a bad field, a bad cursor or limit, a query parameter the route does not take, a missing required parameter, or a month with no usage. `field` names it. | Fix the request. It is safe to retry with the same `Idempotency-Key` — a `400` does not use the key up. | | `unauthenticated` | 401 | No key, a malformed key, an unknown key, a **revoked** key or an **expired** key. All five answer the same thing, on purpose. | Check the key is the one you think it is and that it is still active (`GET /api-keys`). Revoked and expired keys are also recorded in the audit log. | | `forbidden` | 403 | The key is `read_only` and the request changes something, or a key tried to create an `admin` key. | Use an `admin` key, or have a person create the admin key. The refusal is recorded in the audit log. | | `not_found` | 404 | No such database, user, key or operation **in this key's organization**. Another organization's ids answer this too, as does `X-Fenvix-Workspace` naming another organization, and a `databaseId` that is not yours. | Do not treat it as "deleted" without checking: it also means "not yours". | | `conflict` | 409 | The name is taken; the database is already being erased; the 101st active key; an `Idempotency-Key` reused with a *different* request, or while the first one is still running; or a repeat of a request whose answer held a secret. | Read the `message`. A reused key with a different body needs a new key; a secret-bearing answer is never replayed, so start a fresh request. | | `rate_limited` | 429 | Over a limit — per key, or per address for failed keys. | Wait the number of **seconds** in `Retry-After`, then retry. A `429` frees an `Idempotency-Key`. | | `internal` | 500 | The request failed inside the service. One known case: a key, or a database user, was created but the answer could not be completed, so it was revoked or dropped again at once. | Retry. Quote the `X-Request-Id` if it keeps happening. A `5xx` frees an `Idempotency-Key`. | | `unavailable` | 503 | A downstream part did not answer in time: the engine refused or did not answer a network allowlist change (**nothing was saved**), or database users are not available on this deployment yet. `Retry-After` may be set. | Retry after `Retry-After`. For an allowlist change, nothing changed, so a plain retry is safe. | ## Which codes a route can answer Every answer of every endpoint, including its errors, is listed on its own page: [Databases](https://docs.fenvix.dev/api/databases/), [Database users](https://docs.fenvix.dev/api/database-users/), [Network allowlist](https://docs.fenvix.dev/api/network-allowlist/), [Usage](https://docs.fenvix.dev/api/usage/), [Organization](https://docs.fenvix.dev/api/organization/) and [API keys](https://docs.fenvix.dev/api/api-keys/). Those lists come from the API contract itself, so they are exact. ## Finding one request again Every answer, errors included, carries `X-Request-Id`. You can send your own — 8 to 64 characters of `A-Z a-z 0-9 . _ -` — and it is kept. Log it, and quote it when you contact support. ```bash curl -sS -D - -o /dev/null "$FENVIX_API/organization" \ -H "Authorization: Bearer $FENVIX_KEY" \ -H "X-Request-Id: checkout-deploy-8831" ``` ## Retrying safely Any `POST`, `PUT` or `DELETE` can carry `Idempotency-Key` (1 to 255 visible characters). For 24 hours: | You send | You get | | --- | --- | | the same key, the same request | the first answer again, with `Idempotent-Replay: true` | | the same key, a *different* request | `409` | | the same key while the first request is still running | `409` ("still running") | | the same key, after a `400`, a `429` or a `5xx` | the key is free again — fix and retry | Answers that hold a secret — a new API key, a new database user's password — are **never** replayed: a repeat answers `409` and makes nothing. Keys are per organization and shared with the console's routes. ## Pages Lists take `limit` (1 to 100, default 20) and `cursor`, and answer `{ "items": [...], "nextCursor" }`. Pass `nextCursor` back as `cursor` for the next page; it is `null` on the last page. Cursors are opaque: do not build one or read anything out of it. ## Unknown query parameters are refused A query parameter a route does not take is a `400` whose `field` names the parameter. It is not ignored, so a typo fails loudly instead of quietly doing the wrong thing. ## Long operations are not errors Creating or erasing a database waits up to 20 seconds. If it is not finished by then the answer is **`202`** with the operation, a `Location` header and `Retry-After` — not an error. Poll `GET /operations/{id}` until `status` is `succeeded` or `failed`; a failed operation carries the same `{ code, message, field? }` in its `error`. # Databases Source: https://docs.fenvix.dev/api/databases/ Create, read and erase the databases of your organization, and poll the long operations that back them. The examples use the two shell variables from [Authentication](https://docs.fenvix.dev/api/authentication/): ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` ## List databases, newest first `GET /databases` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/databases" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `cursor` | query | no | string | The nextCursor of the previous page. | | `limit` | query | no | integer | Default `20`. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `object` | A page of databases. | | `400` | `Error` | Bad cursor or limit. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Create a database `POST /databases` Needs an **`admin`** key. Accepts `Idempotency-Key`. Answers 201 with the database and its initial user. The initial user's password is in this answer only (null in a replay or a poll). ```bash curl -sS -X POST "$FENVIX_API/databases" \ -H "Authorization: Bearer $FENVIX_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"orders","region":"eu-central-1"}' ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Request body | Field | Required | Type | Notes | | --- | --- | --- | --- | | `name` | yes | string | 3 to 48 lowercase letters, numbers or dashes. Pattern `^[a-z0-9][a-z0-9-]{1,46}[a-z0-9]$`. | | `region` | yes | string (`eu-central-1`) | — | | `tags` | no | array | — | | `appUser` | no | string | Name of the initial database user. Default app. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `201` | `CreatedDatabase` | Created. | | `202` | `object` | Still running. Poll the URL in Location (GET /operations/{id}). | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Get a database `GET /databases/{id}` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/databases/$DATABASE_ID" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `Database` | The database. Its connection string never holds a password. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `404` | `Error` | No such database in this organization. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Delete (erase) a database `DELETE /databases/{id}` Needs an **`admin`** key. Accepts `Idempotency-Key`. ```bash curl -sS -X DELETE "$FENVIX_API/databases/$DATABASE_ID" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `object` | Erased. | | `202` | `object` | Still running. Poll the URL in Location (GET /operations/{id}). | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `404` | `Error` | No such database in this organization. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Poll a long operation `GET /operations/{id}` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/operations/$OPERATION_ID" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `OperationWithResult` | The operation. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `404` | `Error` | No such operation. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | # Database users Source: https://docs.fenvix.dev/api/database-users/ The MongoDB users your application signs in to a database with. The examples use the two shell variables from [Authentication](https://docs.fenvix.dev/api/authentication/): ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` ## List a database's users `GET /databases/{id}/users` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/databases/$DATABASE_ID/users" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `cursor` | query | no | string | The nextCursor of the previous page. | | `limit` | query | no | integer | Default `20`. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `object` | A page of users, by name. Never a password. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `404` | `Error` | No such database. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | | `503` | `Error` | Database users are not available on this deployment yet. | ## Create a database user `POST /databases/{id}/users` Needs an **`admin`** key. Accepts `Idempotency-Key`. The password is in this answer only. Repeating the request with the same Idempotency-Key answers 409 and makes nothing. ```bash curl -sS -X POST "$FENVIX_API/databases/$DATABASE_ID/users" \ -H "Authorization: Bearer $FENVIX_KEY" \ -H "Content-Type: application/json" \ -d '{"username":"reporting"}' ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Request body | Field | Required | Type | Notes | | --- | --- | --- | --- | | `username` | yes | string | Pattern `^[a-z][a-z0-9_-]{2,31}$`. | | `role` | no | string (`readWrite`, `read`) | Default `readWrite`. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `201` | `CreatedDatabaseUser` | Created. | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `404` | `Error` | No such database. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | | `503` | `Error` | Database users are not available on this deployment yet. | ## Delete a database user `DELETE /databases/{id}/users/{username}` Needs an **`admin`** key. Accepts `Idempotency-Key`. ```bash curl -sS -X DELETE "$FENVIX_API/databases/$DATABASE_ID/users/$DB_USERNAME" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `username` | path | yes | string | — | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `object` | Deleted. | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `404` | `Error` | No such database or user. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | | `503` | `Error` | Database users are not available on this deployment yet. | # Network allowlist Source: https://docs.fenvix.dev/api/network-allowlist/ Which addresses may connect to a database. The examples use the two shell variables from [Authentication](https://docs.fenvix.dev/api/authentication/): ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` ## Get a database's IP allowlist `GET /databases/{id}/ip-allowlist` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/databases/$DATABASE_ID/ip-allowlist" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `IpAllowlist` | The allowlist. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `404` | `Error` | No such database. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Replace a database's IP allowlist `PUT /databases/{id}/ip-allowlist` Needs an **`admin`** key. Accepts `Idempotency-Key`. ```bash curl -sS -X PUT "$FENVIX_API/databases/$DATABASE_ID/ip-allowlist" \ -H "Authorization: Bearer $FENVIX_KEY" \ -H "Content-Type: application/json" \ -d '{"entries":["203.0.113.7"]}' ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Request body | Field | Required | Type | Notes | | --- | --- | --- | --- | | `entries` | yes | array | At most 100. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `IpAllowlist` | The new allowlist. | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `404` | `Error` | No such database. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | | `503` | `Error` | The engine did not answer; nothing was changed. | # Usage Source: https://docs.fenvix.dev/api/usage/ Requests and stored bytes per bucket, and the monthly report as a CSV file. The examples use the two shell variables from [Authentication](https://docs.fenvix.dev/api/authentication/): ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` ## Usage of the organization `GET /usage` Works with an **`admin`** or a **`read_only`** key. Requests and stored bytes of every database of the organization (or of one, with databaseId), per bucket and in total. Copied from the engine by the usage sync; see the Usage section of the guide for what each number means and how fresh it is. ```bash curl -sS "$FENVIX_API/usage?range=24h" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `range` | query | yes | string (`24h`, `7d`, `30d`) | 24h: 24 hourly buckets. 7d: 28 six-hourly buckets (UTC 00, 06, 12, 18). 30d: 30 UTC days. The last bucket is the current one. | | `databaseId` | query | no | string | Only this database (same answer as GET /databases/{id}/usage). | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `Usage` | The usage. | | `400` | `Error` | Missing or unknown range. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `404` | `Error` | databaseId is not a database of this organization. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Usage of a database `GET /databases/{id}/usage` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/databases/$DATABASE_ID/usage?range=24h" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `range` | query | yes | string (`24h`, `7d`, `30d`) | 24h: 24 hourly buckets. 7d: 28 six-hourly buckets (UTC 00, 06, 12, 18). 30d: 30 UTC days. The last bucket is the current one. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `Usage` | The usage. activeDatabases is 0 or 1. | | `400` | `Error` | Missing or unknown range. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `404` | `Error` | No such database in this organization. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Monthly usage report as CSV `GET /usage/export` Works with an **`admin`** or a **`read_only`** key. The dashboard's monthly report (per database or per tag), as a signed link to a CSV file that works for 15 minutes without a key. The file is built when the link is opened. ```bash curl -sS "$FENVIX_API/usage/export?month=2026-10&by=database" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `month` | query | yes | string | YYYY-MM (UTC). | | `by` | query | yes | string (`database`, `tag`) | — | | `tagKey` | query | no | string | With by=tag: one row per value of this tag key (and (none)). Without it: one row per key:value. | | `sort` | query | no | string (`name`, `databases`, `storageGb`, `requests`) | databases only with by=tag. Default `requests`. | | `dir` | query | no | string (`asc`, `desc`) | Default `desc`. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `object` | The link. | | `400` | `Error` | Bad parameters, or there is no usage for that month. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | # Organization Source: https://docs.fenvix.dev/api/organization/ The organization a key belongs to, and the key's own id and role. The examples use the two shell variables from [Authentication](https://docs.fenvix.dev/api/authentication/): ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` ## The key's organization `GET /organization` Works with an **`admin`** or a **`read_only`** key. ```bash curl -sS "$FENVIX_API/organization" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `Organization` | The organization. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | # API keys Source: https://docs.fenvix.dev/api/api-keys/ List, create and revoke the public API keys of your organization. The examples use the two shell variables from [Authentication](https://docs.fenvix.dev/api/authentication/): ```bash export FENVIX_API=https://api.fenvix.dev/v1/public export FENVIX_KEY="$(read_from_your_secret_store)" # never written in a command ``` ## List API keys `GET /api-keys` Needs an **`admin`** key. A signed-in console session of an owner or admin also works, with `X-Fenvix-Workspace: `. ```bash curl -sS "$FENVIX_API/api-keys" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `cursor` | query | no | string | The nextCursor of the previous page. | | `limit` | query | no | integer | Default `20`. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `object` | A page of keys, newest first. Never the key itself. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Create an API key `POST /api-keys` Needs an **`admin`** key. A signed-in console session of an owner or admin also works, with `X-Fenvix-Workspace: `. Accepts `Idempotency-Key`. The key (`token`) is in this answer only; store it now. Repeating the request with the same Idempotency-Key answers 409. At most 100 active keys per organization (409). Only a dashboard session creates admin keys; a key creates read_only keys that expire no later than itself (and must expire if it does), and that are revoked when it is. A session must send X-Fenvix-Workspace. ```bash curl -sS -X POST "$FENVIX_API/api-keys" \ -H "Authorization: Bearer $FENVIX_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"ci deploys","role":"read_only"}' ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Request body | Field | Required | Type | Notes | | --- | --- | --- | --- | | `name` | yes | string | — | | `role` | yes | string (`admin`, `read_only`) | — | | `expiresAt` | no | string or null | — | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `201` | `object` | Created. | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | ## Revoke an API key `DELETE /api-keys/{id}` Needs an **`admin`** key. A signed-in console session of an owner or admin also works, with `X-Fenvix-Workspace: `. Accepts `Idempotency-Key`. ```bash curl -sS -X DELETE "$FENVIX_API/api-keys/$KEY_ID" \ -H "Authorization: Bearer $FENVIX_KEY" ``` ### Parameters | Name | In | Required | Type | Notes | | --- | --- | --- | --- | --- | | `id` | path | yes | string | — | | `Idempotency-Key` | header | no | string | Repeat a request safely for 24 hours. See the Idempotency section. | ### Answers | Status | Body | Meaning | | --- | --- | --- | | `200` | `ApiKey` | Revoked (repeating it changes nothing). | | `400` | `Error` | The request is not valid; `field` names the part that is not. | | `401` | `Error` | No key, or the key is not valid, has expired or has been revoked. | | `403` | `Error` | The key is read only. | | `404` | `Error` | No such key in this organization. | | `409` | `Error` | Conflict: the name is taken, the database is busy, or the Idempotency-Key was used for another request. | | `429` | `Error` | Too many requests. Wait for the number of seconds in Retry-After. | # Commands Source: https://docs.fenvix.dev/commands/ Operations built for one database per customer: fork, restore, export, erase, usage and keep awake. Every command works on one database. It never touches any other customer. Fork, restore, export, tags and keep awake are available in the console only, not in the public API. Erase and usage are also in the [API](https://docs.fenvix.dev/api/databases/). ## Fork An instant copy of a database, for a test, a branch or an agent. The copy is its own database, with its own state. ## Restore one customer Bring one database back to an earlier point in time, up to 7 days back, without touching any other customer. See [Limits](https://docs.fenvix.dev/limits/). ## Export and erase Hand over or delete everything a customer has, in one operation. Erase asks you to type the database name to confirm. ## Usage per customer Storage and requests for each database, or grouped by tag, for any month. Export the table as CSV to bill your own customers. ## Keep awake Hold chosen databases open so they answer without a wake, and let the rest sleep. # Limits Source: https://docs.fenvix.dev/limits/ The limits that apply today: sizes, counts, rates, and what was and was not tested. This page lists limits that are enforced today or that were tested. A number is here only if it was checked against the service or the engine. Limits that are not decided yet are not listed. ## Databases | Limit | Value | | --- | --- | | Database name | 3 to 48 characters: lowercase letters, digits and hyphens, starting and ending with a letter or digit | | Tags on one database | 20 | | Database users on one database | 20 | | Restore window | 7 days (set on every new database) | | Requests about database users | 70 a minute in all, per person and per API key; at most 10 of them a minute can create, reset or delete a user | The restore window is how far back in time a database can be restored. It is set when a database is created or forked. A database created before the window was set is not covered by this number. ## Documents and requests | Limit | Value | | --- | --- | | Size of one document | 16 MiB (16,777,216 bytes) | | Size of one message from a driver | 48,000,000 bytes | | Operations in one write batch | 100,000 | ## API keys and the public API | Limit | Value | | --- | --- | | Active API keys per organization | 100 | | Longest life of a key | 3 years from the day it is created | | Length of a key's name | 60 characters | | Requests per key | 120 a minute (the default setting) | | Idempotency keys | remembered for 24 hours | More about rates and `429` answers is in [Authentication](https://docs.fenvix.dev/api/authentication/#rate-limits) and [Errors](https://docs.fenvix.dev/api/errors/). ## Organizations | Limit | Value | | --- | --- | | Name of an organization | 2 to 64 characters | | Members of an organization | 50, counting pending invitations | | Organizations one person can belong to | 50 | | Organizations one person can create in a day | 10 | | Invitations one organization can send in a day | 20 | | How long an invitation stays valid | 7 days | | Attempts to accept an invitation | 10 a minute, per person | ## Compatibility and testing - **Replica sets:** behaviour was tested on single-node replica sets only. Secondaries, elections and a majority across nodes were not tested. - **Drivers:** only the Python driver `pymongo` 4.19 and the Node.js driver `mongodb` 7.7 were tested. Other drivers that send the same commands are expected to behave the same, but that was not tested. - **Reference server:** MongoDB 7.0.45. See [Compatibility](https://docs.fenvix.dev/compatibility/) for every feature and its result. - **Performance and price:** not covered by the compatibility tests. # FAQ Source: https://docs.fenvix.dev/faq/ Short answers about sleeping databases, durability, protocols and cost. ## Is this MongoDB? No. FENVIX is its own database engine on object storage. It speaks the MongoDB protocol, so MongoDB drivers and tools connect to it. ## How fast does a sleeping database answer? It wakes on the first request and reads its files from the bucket, so the first request after a sleep is slower than the ones after it. A database that is kept awake never sleeps and answers every request at the same speed. ## Can I lose data if a server crashes? A write is acknowledged only once it is in the bucket. In our tests, 20 forced kills lost no acknowledged write. ## What does an idle database cost? Storage only. A closed database makes no requests. Estimated at about $9 a month in storage for 1,000,000 idle databases, calculated from measurements on local disk (200 documents per database) at S3 Standard prices. It has not been run with 1,000,000 databases on S3. ## Will my application work? Check [Compatibility](https://docs.fenvix.dev/compatibility/). 1,081 of 1,081 differential tests pass against a reference MongoDB 7.0, and 1,237 of 1,268 MongoDB 7.0 features, compared against a real MongoDB server, give the same result. Your own code may use something that is not. ## Can I try it? Yes. Sign in to the [console](https://console.fenvix.dev), create a database and copy its connection string.