diff --git a/README.md b/README.md index 822c7db..e1cf151 100644 --- a/README.md +++ b/README.md @@ -209,7 +209,7 @@ db.find({ $or: [{ planet: 'Earth' }, { planet: 'Mars' }], inhabited: true }, fun * `query` is the same kind of finding query you use with `find` and `findOne` * `update` specifies how the documents should be modified. It is either a new document or a set of modifiers (you cannot use both together, it doesn't make sense!) * A new document will replace the matched docs - * The available modifiers are `$set` to change a field's value, `$inc` to increment a field's value and `$push`, `$pop`, `$addToSet` to work on arrays. The modifiers create the fields they need to modify if they don't exist, and you can apply them to subdocs. See examples below for the syntax + * The modifiers create the fields they need to modify if they don't exist, and you can apply them to subdocs. Available field modifiers are `$set` to change a field's value and `$inc` to increment a field's value. To work on arrays, you have `$push`, `$pop`, `$addToSet`, and the special `$each`. See examples below for the syntax. * `options` is an object with two possible parameters * `multi` (defaults to `false`) which allows the modification of several documents if set to true * `upsert` (defaults to `false`) if you want to insert a new document corresponding to the `update` rules if your `query` doesn't match anything @@ -271,7 +271,7 @@ db.update({ planet: 'Pluton' }, { $inc: { distance: 38 } }, { upsert: true }, fu // let's see how we can modify the array field atomically // $push inserts new elements at the end of the array -db.update({ _id: 'id6' }, { $push: { fruits: ['banana'] } }, {}, function () { +db.update({ _id: 'id6' }, { $push: { fruits: 'banana' } }, {}, function () { // Now the fruits array is ['apple', 'orange', 'pear', 'banana'] }); @@ -282,11 +282,18 @@ db.update({ _id: 'id6' }, { $pop: { fruits: 1 } }, {}, function () { }); // $addToSet adds an element to an array only if it isn't already in it +// Equality is deep-checked (i.e. $addToSet will not insert an object in an array already containing the same object) // Note that it doesn't check whether the array contained duplicates before or not -db.update({ _id: 'id6' }, { $addToSet: { fruits: ['apple'] } }, {}, function () { +db.update({ _id: 'id6' }, { $addToSet: { fruits: 'apple' } }, {}, function () { // The fruits array didn't change // If we had used a fruit not in the array, e.g. 'banana', it would have been added to the array }); + +// $each can be used to $push or $addToSet multiple values at once +// This example works the same way with $addToSet +db.update({ _id: 'id6' }, { $push: { fruits: ['banana', 'orange'] } }, {}, function () { + // Now the fruits array is ['apple', 'orange', 'pear', 'banana', 'orange'] +}); ``` ### Removing documents