summaryrefslogtreecommitdiff
path: root/node_modules/mongoose/docs/migration-guide.md
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/mongoose/docs/migration-guide.md')
-rw-r--r--node_modules/mongoose/docs/migration-guide.md148
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
+