diff options
Diffstat (limited to 'node_modules/mongoose/docs/migration-guide.md')
| -rw-r--r-- | node_modules/mongoose/docs/migration-guide.md | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/node_modules/mongoose/docs/migration-guide.md b/node_modules/mongoose/docs/migration-guide.md new file mode 100644 index 0000000..214bd4e --- /dev/null +++ b/node_modules/mongoose/docs/migration-guide.md @@ -0,0 +1,148 @@ + +Migrating from v1.x to 2.x +========================== + +Migrating from __v1.x__ to __2.x__ brings with it a few changes to be aware of. + +## Auto-reconnect + +Previously the `auto_reconnect` option of the node-mongodb-driver +defaulted to false. It now defaults to true so if your connection drops +while your app is running the driver will continue retrying until it +can connect again. + +## Private props + +Several internal instance props have had name changes so its more obvious that +they are not intended for public use. Namely `instance.doc` has changed +to `instance._doc` since it contains the structure Mongoose relies on +to operate properly and should only be manipulated with caution. + +Here are the relavent changes: + + var thing = new Thing; + + thing.doc -> thing._doc + thing.activePaths -> thing._activePaths + thing.saveError -> thing._saveError + thing.validationError -> thing._validationError + +## Circular refs in getters + +Previously Mongoose exibited very odd behavior with getters: + + toy.color.color.color.color ... // actually worked! + +Obviously this was wrong and has now been fixed. + + toy.color.color // undefined + +## Getter / Setter scope + +Nested getter/setter scopes were set incorrectly since version 1.7 or so. +This has been fixed. In your getter/setter, `this` now properly refers +to the instance. + + var SongSchema = new Schema({ + title: String + , detail: { + format: String + } + }); + + SongSchema.path('detail.format').get(function () { + console.log(this !== this.detail) // true, used to be false + }); + +You may not have noticed this bug since the circular getters previously +masked (_mostly_) this bad behavior. + +## Setters application + +Setters are no longer applied when the doc returns from the db (bug). It +caused problems for folks trying to use setters for passwords / salts +resulting in doubly hashed passwords after queries. + + UserSchema.path('password').set(function (val) { + // now only runs when you change `user.password` + // not when the doc returns from the db + }); + +## Query#bind + +If you were using the `Query` object directly and calling its `bind` +method, the v1.x behavior cloned the query and returned the +new one. This is no longer the case. The query is now simply +bound and returns itself. + +## Multiple collection support removed + +In 1.x Mongoose had support for multiple collection names per model. This +was an edge case and support for it has been removed. + +## Compat.js removed + +Backward compatibility with verions 0.x has been removed. + + require('mongoose').compat = true // no longer does anything + +## Utils.erase removed + +We removed utils.erase since it was unused in the project. If you were +using it you'll need to copy it from the 1.x branch into your own. + +## Error handling + +Previously, the error returned after failed validation contained an `errors` +object which was a hash of path keys to error message values. +Now the Error returned is more helpful. Instead of the `errors` +object containing string values it holds the actual +ValidatorError. Each ValidatorError has a `type` and `path` property +providing us with a little more error handling flexibility. + + var ToySchema = new Schema({ + color: String + , name: String + }); + + var Toy = db.model('Toy', ToySchema); + + Toy.schema.path('name').validate(function (value) { + return /blue|green|white|red|orange|periwinkel/i.test(value); + }, 'Invalid color'); + + var toy = new Toy({ color: 'grease'}); + + toy.save(function (err) { + // previous behavior (v1x): + + console.log(err.errors.color) + // prints 'Validator "Invalid color" failed for path color' + + // new v2x behavior - err.errors.color is a ValidatorError object + + console.log(err.errors.color.message) + // prints 'Validator "Invalid color" failed for path color' + + // you can get v1 behavior back by casting error.color toString + + console.log(String(err.errors.color)) + // prints 'Validator "Invalid color" failed for path color' + + console.log(err.errors.color.type); + // prints "Invalid color" + + console.log(err.errors.color.path) + // prints "color" + + console.log(err.name) + // prints "ValidationError" + + console.log(err.message) + // prints "Validation failed" + }); + +BTW, the `err.errors` object is also available on the model instance. + + toy.errors.color.message === err.errors.color.message + |
