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

Using $pop to remove an array item causes an error #406

Open Shelagh-Lewins opened 4 years ago

Shelagh-Lewins commented 4 years ago

I have a schema which defines an array like this:

'myArray': {
    'type': Array,
},
'myArray.$': {
    'type': Date,
},

I'm trying to remove an element from the end of the array like this:

MyCollection.update({ _id }, { $pop: { myArray: 1 }})

This gives a server error:

MongoError: Expected a number in: myArray:

If I bypass Collection 2 like this, the operation succeeds:

MyCollection.update({ _id }, { $pop: { myArray: 1 }}, { 'bypassCollection2': true })

So it looks like there is some bug with collection2 and the $pop operation on arrays?

harryadel commented 4 years ago

I believe the culprit is this line in simpl-schema where it cleans $pop operator fields and thus changes 1 to a date.

So, I did a little more digging and found out that the typeValidator returns an error so it gets converted to its respective value which is a date.

harryadel commented 4 years ago

:crossed_fingers: :grimacing: