Skip to content

Whats New

Aryeh Citron edited this page May 12, 2026 · 2 revisions

What's New

v1.0.0 — MongoDB.Driver 3.x Upgrade

BREAKING: Upgraded from MongoDB.Driver 2.30.0 to 3.8.1.

  • MongoDB.Driver 3.8.1 — upgraded from 2.30.0 (major version bump)
  • Removed separate MongoDB.Driver.GridFS package (now included in MongoDB.Driver 3.x)
  • Added IMongoClient.BulkWrite/BulkWriteAsync stubs (client-level bulk write, throws NotSupportedException)
  • Added IDisposable.Dispose() on InMemoryMongoClient (no-op, required by IMongoClient in Driver 3.x)
  • LINQ2 provider no longer available (removed in Driver 3.x — LINQ3 only)
  • Updated SdkVersionDriftDetector tested version range to 3.0.0–3.8.1

v0.11.60 — Bug Fixes & Parity Testing

  • 26 tests converted from InMemoryOnly to real MongoDB parity
  • Change stream tests rewritten with async polling for real MongoDB compatibility
  • Unknown RunCommand commands now throw MongoCommandException (code 59)
  • Numerous bug fixes: $rename, $push modifiers, Distinct null handling, $gt/$lt null, $getField, and more

v0.10.0 — Index Enforcement & TTL

  • Unique index enforcement on all write paths (Insert, Replace, Update, FindOneAnd*)
  • Compound unique indexes — multi-field uniqueness validation
  • Sparse index support — documents missing indexed fields excluded from uniqueness checks
  • Partial filter expression — unique constraint only applies to matching documents
  • TTL index enforcement with lazy eviction on queries
  • TTL array field support (uses earliest date)
  • partialFilterExpression stored in index metadata and returned by ListIndexes
  • Index creation validates existing documents for uniqueness violations

v0.9.0 — Fault Injection & Concurrency

  • Fault injection via InMemoryMongoCollection.FaultInjector for simulating errors
  • Operation logging via OperationLog for recording and asserting operations
  • Concurrency safety — per-document SemaphoreSlim locking prevents lost-update race conditions
  • Atomic DocumentStore.Update() function for safe concurrent modifications

v0.8.0 — Capped Collections & JavaScript

  • Capped collections with MaxDocuments, MaxSize, FIFO eviction, insertion order
  • Tailable cursors (CursorType.Tailable and TailableAwait)
  • $jsonSchema filter with required, bsonType, numeric/string/array constraints, enum, pattern
  • $where filter with pluggable evaluator
  • $function expression operator with pluggable evaluator
  • $accumulator group operator with pluggable evaluator
  • JsTriggers packageJsExpressionSetup.Register() enables JavaScript execution via Jint

v0.7.0 — GridFS

  • InMemoryGridFSBucket — Upload (bytes + stream), download (by id + by name), delete, rename, find, drop
  • Chunked storage matching real GridFS file/chunk structure
  • Configurable chunk size

v0.6.0 — Text Search & Geospatial

  • $text filter with $search, $caseSensitive
  • $geoWithin, $geoIntersects, $near, $nearSphere geospatial filters
  • Full geometric calculations via NetTopologySuite

v0.5.0 — Advanced Operators

  • Array filter operators: $all, $elemMatch, $size
  • Bitwise operators: $bitsAllSet, $bitsAllClear, $bitsAnySet, $bitsAnyClear
  • $mod operator
  • Additional aggregation expression operators

v0.4.0 — Aggregation & Views

  • 34 aggregation pipeline stages
  • 100+ expression operators
  • Database views via CreateView()
  • Window functions in $setWindowFields

v0.3.0 — DI & Change Streams

  • DI registration: UseInMemoryMongoDB(), UseInMemoryMongoCollections()
  • Change streams (collection and client level)
  • Transactions with snapshot isolation
  • State persistence (Export/Import)

v0.2.0 — Core Features

  • Full CRUD operations
  • Filter, sort, projection, skip, limit
  • Update operators ($set, $inc, $push, etc.)
  • BulkWrite with ordered/unordered modes
  • Index manager (metadata only)

v0.1.0 — Foundation

  • InMemoryMongoClient, InMemoryMongoDatabase, InMemoryMongoCollection<T>
  • Basic document storage with ConcurrentDictionary
  • BsonDocument serialization/deserialization
  • InMemoryMongo.Create<T>() factory

See Also

Clone this wiki locally