moleculerjs / moleculer-db

:battery: Database access service mixins for Moleculer
https://moleculer.services/
MIT License
152 stars 121 forks source link

Potential error in updateById and Mongoose adapter #360

Open kree-alltold opened 1 year ago

kree-alltold commented 1 year ago

Hi, I have been using moleculer-db with the mongoose adapter successfully for several months now. I am not sure why this issue is just now showing itself, but I have noticed two potential problems, one in the adapter and one in the core db service code.

  1. In _update() you call beforeEntityChanged() here, but there is not corresponding call to entityChanged()` at the end of the function.
  2. In the mongoose adapter the method updateById() returns a Query object. For some reason I just started having to explicitly call exec() on the returned query to get a doc that I can send to transformDocuments(), otherwise I was getting the error enity.toJSON() is not a function.

Note that I use _update() (or the update action) when possible, however, there are cases where I need to do a more complicated update operation than what the db adapter supports and I call updateById directly and then call transformDocuments.

Any ideas if either of these are actual bugs in the code, or is this working as intended and I am must have done something else that broke things.

icebob commented 1 year ago
  1. Here is the calling of entityChanged: https://github.com/moleculerjs/moleculer-db/blob/0b5a04a8818dbbc6bfd9ebf0c113b6854d26b442/packages/moleculer-db/src/index.js#L1032
  2. You don't need to call exec because the returned object is a Promise, so if you call it with await it will be executed without exec.