NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4415 most downloaded on npm
Mongoose MongoDB ODM
Last release 4 days ago
14 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 58 of the last 60 stable releases
4 versions withdrawn
withdrawn after publishing
16 years old
1017 releases · first in 2010
fix(model+plugins): correctly apply shard key on deleteOne() #15705 #15701
perf(setDefaultsOnInsert): avoid computing all modified paths when running setDefaultsOnInsert and update validators, only calculate if there are defa
One column per quarter.
perf: avoid getting all modified paths in update when checking if versionKey needs to be set #15677 #15672
feat: upgrade mongodb driver to 6.20.0 #15651 #15656
fix(update): avoid throwing error if update has a top-level $addToSet with no path #15648 #15642
fix(document): prevent $clone() from converting mongoose arrays into vanilla arrays #15633 #15625
types: correct type inference for maps of maps #15602
feat(schema): support for union types #15574 #10894
fix: avoid Model.validate() hanging when all paths fail casting #15580 #15579 piotracalski
fix(query): propagate read preference and read concern to populate if read() called after populate() #15567 #15553
feat: upgrade mongodb -> 6.18.0 #15552
fix(map): avoid throwing required error if saving map of primitives with required: true #15542
fix(connection): avoid calling connection.close() internally with force: Object #15534 #15531
fix(document): clean modified subpaths if unsetting map #15520 #15519
fix(cursor): populate after hydrating in queryCursor so populated docs get parent() #15498 #15494
fix(document): avoid setting _skipMarkModified when setting nested path with merge option #15484 #11913
feat(model): add Model.createSearchIndexes() #15470 #15465
fix(document+schema): improve handling for setting paths underneath maps, including maps of maps #15477 #15461
types: correct handling of _id in ProjectionType #15432 #15418
feat: CSFLE support #15390 baileympearson
types(schema): allow post('init') #15413 #15412 #15333
fix(query): handle casting array filter paths underneath array filter paths with embedded discriminators #15388 #15386
fix: correct change tracking with maps of arrays of primitives and maps of maps #15374 #15350
feat: upgrade MongoDB driver -> 6.16 #15371
fix: export MongooseBulkSaveIncompleteError #15370 #15369
fix: avoid double calling validators on paths in document arrays underneath subdocuments #15338 #15335
fix(populate): handle virtual populate on array of UUIDs #15329 #15315
feat: bump mongodb driver -> 6.15.0
fix(document): avoid stripping out fields in discriminator schema after select: false field #15322 #15308
fix: match bson version with mongodb's bson version #15297 hasezoey
feat: bump mongodb driver to 6.14
feat(model): make bulkWrite results include MongoDB bulk write errors as well as validation errors #15271 #15265
fix(model+connection): return MongoDB BulkWriteResult instance even if no valid ops #15266 #15265
perf(document): only call undoReset() 1x/document #15257 #15255
feat(schema+schematype): add toJSONSchema() method to convert schemas and schematypes to JSON schema #15184 #11162
hydrate() handle hydrating deeply nested populated docs with hydratedPopulatedDocs #15130fix: avoid applying defaults on map embedded paths #15217 #15196
fix(document): allow setting values to undefined with set(obj) syntax with strict: false #15207 #15192
fix: disallow nested $where in populate match
fix(document): fix document not applying manual populate when using a function in schema.options.ref #15138 IchirokuXVI
fix(schema): make duplicate index error a warning for now to prevent blocking upgrading #15135 #15112 #15109
fix(schema): avoid throwing duplicate index error if index spec keys have different order or index has a custom name #15112 #15109
fix(connection): remove heartbeat check in load balanced mode #15089 #15042 #14812
feat: add int32 schematype #15054 aditi-khare-mongoDB
fix: cast using overwritten embedded discriminator key when set #15076 #15051
fix: disallow using $where in match
fix(model): handle array filters when casting bulkWrite #15036 #14978
perf: make a few micro-optimizations to help speed up findOne() #15022 #14906
feat: upgrade mongodb -> ~6.10 #14991 #14877
__v to lean() result type and ModifyResult #14990 #12959fix(cursor): close underlying query cursor when calling destroy() #14982 #14966
fix(document): recursively clear modified subpaths when setting deeply nested subdoc to null #14963 #14952
fix: set flattenObjectIds to false when calling toObject() for internal purposes #14938
feat(model): add Model.applyVirtuals() to apply virtuals to a POJO #14905 #14818
fix(document): avoid massive perf degradation when saving new doc with 10 level deep subdocs #14910 #14897
fix: make getters convert uuid to string when calling toObject() and toJSON() #14890 #14869
fix: make set merge deeply nested objects #14870 #14861 ianHeydoc
fix(document): avoid unnecessary clone() in applyGetters() that was preventing getters from running on 3-level deep subdocuments #14844 #14840 #14835
feat: upgrade mongodb -> 6.8.0, handle throwing error on closed cursor in Mongoose with MongooseError instead of MongoCursorExhaustedError #14813
MongooseError instead of MongoCursorExhaustedError #14813fix(populate): fix a couple of other places where Mongoose gets the document's _id with getters #14833 #14827 #14759
fix: add empty string check for collection name passed #14806 Shubham2552
fix(document): call required functions on subdocuments underneath nested paths with correct context #14801 #14788
lean() set #14799 #14794 #14759 MohOrabyYour coding agent can read these notes before it upgrades. Set up the MCP server →