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

Mongoose hooks #121

Closed
Christilut opened this issue Oct 2, 2018 · 8 comments
Closed

Mongoose hooks #121

Christilut opened this issue Oct 2, 2018 · 8 comments
Assignees

Comments

@Christilut
Copy link

Expected behavior

I would expect that mongoose hooks are executed, eg pre('save', ...

Actual behavior

When saving a document through the forest admin interface, the document is updated in the database but hook was never executed.

Hook does execute when I run the save() function in my code.

Context

  • Package Version: 2.14.2
  • Express Version: 4.16.3
  • Mongoose Version: 5.3.1
  • MongoDB Version: 3.6.8
@Christilut
Copy link
Author

Is this going to get fixed? This completely prevents anyone from using Forest in combination with Mongoose right now. Sure someone might not use hooks but as soon as they do, Forest falls apart.

@arnaudbesnier
Copy link
Member

Hi @Christilut,
Thanks for the feedback, I am sorry but I cannot provide any ETA for a fix.

As a side note, I am not sure that Mongoose hooks are widely used as we have a lot of customers using Mongoose without any concern.

As the liana code is open source, it would make us very happy if you could contribute and fix it. 🤓

@FarazPatankar
Copy link

Hey @arnaudbesnier,

Any update on this issue? Also, if you guys have other issues to fix first, could you give me some pointers on how to fix this? I might pick it up myself.

@joshnissenbaum
Copy link

Really need this ASAP

@IgorDavy
Copy link

IgorDavy commented Sep 12, 2019

Actually the problem comes from Mongoose :
"Pre and post save() hooks are not executed on update()"
https://mongoosejs.com/docs/middleware.html

@Christilut
Copy link
Author

Christilut commented Sep 17, 2019

Not entirely. When using findByIdAndUpdate for example, no document is ever loaded in mongoose so no hook can be executed.
But when doing a findOne call and then save the hooks will be executed. But I guess ForestAdmin implemented it with update calls. They could change it to save calls but it would incur extra overhead.

Personally I think it should work like the second method because hooks not firing is not developer friendly and a surprise for anyone working with this. Especially since we have no say in what an update call actually does, the hooks were the perfect place to add extra logic.

@slimee
Copy link
Contributor

slimee commented Nov 12, 2019

All these hooks are working on Forest/mongoose. You can use the following examples inside a mongoose model definition file.
If you have an issue using hooks please provide a reproducing minimal code and versions in a new ticket.

To capture new record creation:

schema.pre('save', function () {
  console.log('YOU will save a user');
});
schema.post('save', function (doc) {
  console.log('YOU just saved a user', doc);
});
schema.pre('validate', function() {
  console.log('you will validate users');
});
schema.post('validate', function() {
  console.log('you just validated users');
});

To capture record update:

schema.pre('findOneAndUpdate', function () {
  console.log('YOU will update a user');
});
schema.post('findOneAndUpdate', function (doc) {
  console.log('YOU just updated a user', doc);
});

To capture record deletion (from list or from record details) from Forest:

schema.pre('remove', { query: true, document: false }, function () {
  console.log('YOU will query remove a user');
});
schema.post('remove', { query: true, document: false }, function (doc) {
  console.log('YOU just query removed a user', doc);
});

@slimee slimee self-assigned this Nov 12, 2019
@slimee
Copy link
Contributor

slimee commented Nov 12, 2019

Solution provided in the last message.

@slimee slimee closed this as completed Nov 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants