Meteor-Community-Packages / meteor-collection2

A Meteor package that extends Mongo.Collection to provide support for specifying a schema and then validating against that schema when inserting and updating.
https://packosphere.com/aldeed/collection2
MIT License
1.02k stars 108 forks source link

$inc doesn't work correctly on sub-objects (unless bypassCollection2 is present) #388

Open lcampanis opened 6 years ago

lcampanis commented 6 years ago

Consider the following setup (from ReactionCommerce):

import { Accounts as AccountsCollection } from "/lib/collections";

// A schema extension (Extending isn't a problem)
Accounts.extend({
  "incParent": {
     type: Object,
     defaultValue: {},
     optional: true
  },
  "incParent.$": {
     type: Number
  }
});
AccountsCollection.attachSchema(Accounts);

// Call from a method
Accounts.update({
  _id: this.userId
}, {
  $inc: {
    "incParent.subKey1": 10
  }
}, {
  bypassCollection2: true // without this "incParent.subKey1" isn't even created
});

Without bypassCollection2 there is no error and only works if you do $inc: { key: 10 } (but not on a subkey).

You can have:

$inc: {
  key: 10
  "incParent.subKey1": 10
}

and will update only key and not "incParent.subKey1".

With bypassCollection2: true works fine, but isn't correct, hence the issue.

Let me now if you need more info.

Thank you.