Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support modifiers that are aggregation pipelines (Mongo 4.2+) #425

Open
brent-hoover opened this issue Jan 20, 2021 · 2 comments
Open

Support modifiers that are aggregation pipelines (Mongo 4.2+) #425

brent-hoover opened this issue Jan 20, 2021 · 2 comments

Comments

@brent-hoover
Copy link

Maybe I don't understand how validating modifiers is supposed to work related to: #424 validation does not properly handle the syntax for this:

import SimpleSchema from 'simpl-schema';

const PointsSchema = new SimpleSchema({
	pointsType: String,
	finalizedAt: Date,
	finalizedPoints: Number,
	updatedAt: Date,
	age: Number,
	updatedAt: Date
});

const rightNow = new Date();

const modifier = [
    { $set: { pointsType: "finalized" } },
    { $set: { finalizedAt: rightNow, updatedAt: rightNow } },
    { $set: { finalizedPoints: "$adjustedPoints" } }
]


PointsSchema.validate(modifier, { modifier: true });

yields this error:

errorType: 'ClientError',
error: 'validation-error',
details: [
  {
    name: 'finalizedPoints',
    value: '$adjustedPoints',
    type: 'expectedType',
    dataType: 'Number',
    message: 'Finalized points must be of type Number'
  }
]

but that syntax is correct for using the field adjustedPoints to set the value of finalizedPoints

@github-actions
Copy link

Thank you for submitting an issue!

If this is a bug report, please be sure to include, at minimum, example code showing a small schema and any necessary calls with all their arguments, which will reproduce the issue. Even better, you can link to a saved online code editor example, where anyone can immediately run the code and see the issue.

If you are requesting a feature, include a code example of how you imagine it working if it were implemented.

If you need to edit your issue description, click the [...] and choose Edit.

Be patient. This is a free and freely licensed package that I maintain in my spare time. You may get a response in a day, but it could also take a month. If you benefit from this package and would like to see more of my time devoted to it, you can help by sponsoring.

@aldeed
Copy link
Collaborator

aldeed commented Apr 8, 2021

Problem number 1: This package doesn't support aggregation pipeline modifiers (modifier that is an array). Those were new in Mongo 4.2 and so far nobody has submitted a PR to add support for them. Could be quite a bit of work.

Problem number 2: $set as an update operator is different from $set as an aggregation pipeline stage. 🤷🏻 This package only supports the update modifier $set, and as far as I can tell, that one does not allow you to set value based on another field value. That's a pipeline thing.

So....

I don't think there's any bug here, and this is really a feature request to have modifier validation be aware of and support aggregation pipelines. This would be awesome, but as I said, likely a LOT of work. If anyone is interested in trying, I'm happy to help guide the way.

@aldeed aldeed changed the title Schema validation fails when using values from another field Support modifiers that are aggregation pipelines (Mongo 4.2+) Apr 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants