-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Implement Query findById methods #15337
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
Implement Query findById methods #15337
Conversation
@vkarpov15 sorry to tag you, but I'm not sure the best way to request a review. Let me know if you have any thoughts on this one. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements the Query prototype methods findById, findByIdAndUpdate, and findByIdAndDelete to address discrepancies in type definitions versus actual functionality. It also adds corresponding tests to verify the correct behavior of these methods.
- Implements findById, findByIdAndUpdate, and findByIdAndDelete in lib/query.js.
- Adds tests in test/query.test.js to validate these new query methods.
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
File | Description |
---|---|
test/query.test.js | New tests added to verify the behavior of the query methods |
lib/query.js | Implements the new findById, findByIdAndUpdate, and findByIdAndDelete methods |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One minor nitpick, but LGTM otherwise 👍
Merging into 8.14 branch 👍 |
 <h3>Snyk has created this PR to upgrade mongoose from 8.12.1 to 8.14.1.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **7 versions** ahead of your current version. - The recommended version was released **22 days ago**. <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>mongoose</b></summary> <ul> <li> <b>8.14.1</b> - <a href="https://redirect.github.com/Automattic/mongoose/releases/tag/8.14.1">2025-04-29</a></br><h1>8.14.1 / 2025-04-29</h1> <ul> <li>fix: correct change tracking with maps of arrays of primitives and maps of maps <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3020119547" data-permission-text="Title is private" data-url="Automattic/mongoose#15374" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15374/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15374">#15374</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2990690538" data-permission-text="Title is private" data-url="Automattic/mongoose#15350" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15350/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15350">#15350</a></li> <li>fix(populate): consistently convert Buffer representation of UUID to hex string to avoid confusing populate assignment <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3028671691" data-permission-text="Title is private" data-url="Automattic/mongoose#15383" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15383/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15383">#15383</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3028403612" data-permission-text="Title is private" data-url="Automattic/mongoose#15382" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15382/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15382">#15382</a></li> <li>docs: add TypeScript Query guide with info on lean() + transform() <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3025739184" data-permission-text="Title is private" data-url="Automattic/mongoose#15377" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15377/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15377">#15377</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2909610525" data-permission-text="Title is private" data-url="Automattic/mongoose#15311" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15311/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15311">#15311</a></li> </ul> </li> <li> <b>8.14.0</b> - <a href="https://redirect.github.com/Automattic/mongoose/releases/tag/8.14.0">2025-04-25</a></br><h1>8.14.0 / 2025-04-25</h1> <ul> <li>feat: upgrade MongoDB driver -> 6.16 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3018517569" data-permission-text="Title is private" data-url="Automattic/mongoose#15371" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15371/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15371">#15371</a></li> <li>feat: implement Query findById methods <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2964535745" data-permission-text="Title is private" data-url="Automattic/mongoose#15337" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15337/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15337">#15337</a> <a href="https://redirect.github.com/sderrow">sderrow</a></li> <li>feat(subdocument): support schematype-level minimize option to disable minimizing empty subdocuments <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2964364490" data-permission-text="Title is private" data-url="Automattic/mongoose#15336" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15336/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15336">#15336</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2916407638" data-permission-text="Title is private" data-url="Automattic/mongoose#15313" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15313/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15313">#15313</a></li> <li>feat: add skipOriginalStackTraces option to avoid stack trace performance overhead <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2973087871" data-permission-text="Title is private" data-url="Automattic/mongoose#15345" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15345/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15345">#15345</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2803911966" data-permission-text="Title is private" data-url="Automattic/mongoose#15194" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15194/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15194">#15194</a></li> <li>fix(model): disallow Model.findOneAndUpdate(update) and fix TypeScript types re: findOneAndUpdate <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3009226624" data-permission-text="Title is private" data-url="Automattic/mongoose#15365" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15365/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15365">#15365</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3006742365" data-permission-text="Title is private" data-url="Automattic/mongoose#15363" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15363/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15363">#15363</a></li> <li>types: correctly recurse in InferRawDocType <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2997936879" data-permission-text="Title is private" data-url="Automattic/mongoose#15357" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15357/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15357">#15357</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2581233621" data-permission-text="Title is private" data-url="Automattic/mongoose#14954" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/14954/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/14954">#14954</a> <a href="https://redirect.github.com/JavaScriptBach">JavaScriptBach</a></li> <li>types: include virtuals in toJSON and toObject output if virtuals: true set <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2975132650" data-permission-text="Title is private" data-url="Automattic/mongoose#15346" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15346/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15346">#15346</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2920983347" data-permission-text="Title is private" data-url="Automattic/mongoose#15316" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15316/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15316">#15316</a></li> <li>types: make init hooks types accurately reflect runtime behavior <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2953291245" data-permission-text="Title is private" data-url="Automattic/mongoose#15331" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15331/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15331">#15331</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2900387338" data-permission-text="Title is private" data-url="Automattic/mongoose#15301" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15301/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15301">#15301</a></li> </ul> </li> <li> <b>8.13.3</b> - <a href="https://redirect.github.com/Automattic/mongoose/releases/tag/8.13.3">2025-04-24</a></br><h1>8.13.3 / 2025-04-24</h1> <ul> <li>fix: export MongooseBulkSaveIncompleteError <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3018324222" data-permission-text="Title is private" data-url="Automattic/mongoose#15370" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15370/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15370">#15370</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3016503732" data-permission-text="Title is private" data-url="Automattic/mongoose#15369" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15369/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15369">#15369</a></li> <li>fix: clone POJOs and arrays when casting query filter to avoid mutating objects <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3011345200" data-permission-text="Title is private" data-url="Automattic/mongoose#15367" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15367/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15367">#15367</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3008658821" data-permission-text="Title is private" data-url="Automattic/mongoose#15364" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15364/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15364">#15364</a></li> <li>types(connection): add Connection.prototype.bulkWrite() to types <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3011492862" data-permission-text="Title is private" data-url="Automattic/mongoose#15368" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15368/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15368">#15368</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3001950341" data-permission-text="Title is private" data-url="Automattic/mongoose#15359" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15359/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15359">#15359</a></li> <li>docs: add version requirements to v7 migration docs <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3004536206" data-permission-text="Title is private" data-url="Automattic/mongoose#15361" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15361/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15361">#15361</a> <a href="https://redirect.github.com/SethFalco">SethFalco</a></li> <li>docs: update links in deleteOne & deleteMany API def <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3002799852" data-permission-text="Title is private" data-url="Automattic/mongoose#15360" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15360/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15360">#15360</a> <a href="https://redirect.github.com/Elliot67">Elliot67</a></li> <li>docs: adds Model#count to list of fns callback removed from <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2984680663" data-permission-text="Title is private" data-url="Automattic/mongoose#15349" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15349/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15349">#15349</a> <a href="https://redirect.github.com/SethFalco">SethFalco</a></li> </ul> </li> <li> <b>8.13.2</b> - <a href="https://redirect.github.com/Automattic/mongoose/releases/tag/8.13.2">2025-04-03</a></br><h1>8.13.2 / 2025-04-03</h1> <ul> <li>fix: avoid double calling validators on paths in document arrays underneath subdocuments <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2964589348" data-permission-text="Title is private" data-url="Automattic/mongoose#15338" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15338/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15338">#15338</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2962842706" data-permission-text="Title is private" data-url="Automattic/mongoose#15335" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15335/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15335">#15335</a></li> </ul> </li> <li> <b>8.13.1</b> - <a href="https://redirect.github.com/Automattic/mongoose/releases/tag/8.13.1">2025-03-28</a></br><h1>8.13.1 / 2025-03-28</h1> <ul> <li>fix(populate): handle virtual populate on array of UUIDs <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2950829127" data-permission-text="Title is private" data-url="Automattic/mongoose#15329" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15329/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15329">#15329</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2920867131" data-permission-text="Title is private" data-url="Automattic/mongoose#15315" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15315/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15315">#15315</a></li> <li>types: allow default function returning undefined with DocType override <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2947550615" data-permission-text="Title is private" data-url="Automattic/mongoose#15328" data-hovercard-type="pull_request" data-hovercard-url="/Automattic/mongoose/pull/15328/hovercard" href="https://redirect.github.com/Automattic/mongoose/pull/15328">#15328</a></li> </ul> </li> <li> <b>8.13.0</b> - <a href="https://redirect.github.com/Automattic/mongoose/releases/tag/8.13.0">2025-03-24</a></br><h1>8.13.0 / 2025-03-24</h1> <ul> <li>feat: bump mongodb driver -> 6.15.0</li> <li>feat: support custom types exported from driver <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2932613125" data-permission-text="Title is private" data-url="Automattic/mongoose#15321" data-hovercard-type="issue" data-hovercard-url="/Automattic/mongoose/issues/15321/hovercard" href="https://redirect.github.com/Automattic/mongoose/issues/15321">#15321</a></li> </ul> </li> <li> <b>8.12.2</b> - 2025-03-21 </li> <li> <b>8.12.1</b> - 2025-03-04 </li> </ul> from <a href="https://redirect.github.com/Automattic/mongoose/releases">mongoose GitHub release notes</a> </details> </details> --- > [!IMPORTANT] > > - Check the changes in this PR to ensure they won't cause issues with your project. > - This PR was automatically created by Snyk using the credentials of a real user. --- **Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._ **For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiIyMjEyNTFhNy1lOGJhLTQyZjYtOGU0My01MzllOGU3NjRhYTciLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjIyMTI1MWE3LWU4YmEtNDJmNi04ZTQzLTUzOWU4ZTc2NGFhNyJ9fQ==" width="0" height="0"/> > - 🧐 [View latest project report](https://app.snyk.io/org/kdsdesign1/project/6dfd2c96-abbb-46a3-be3c-7747489f415d?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template) > - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/kdsdesign1/project/6dfd2c96-abbb-46a3-be3c-7747489f415d/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/kdsdesign1/project/6dfd2c96-abbb-46a3-be3c-7747489f415d/settings/integration?pkg=mongoose&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) [//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"mongoose","from":"8.12.1","to":"8.14.1"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"221251a7-e8ba-42f6-8e43-539e8e764aa7","prPublicId":"221251a7-e8ba-42f6-8e43-539e8e764aa7","packageManager":"npm","priorityScoreList":[],"projectPublicId":"6dfd2c96-abbb-46a3-be3c-7747489f415d","projectUrl":"https://app.snyk.io/org/kdsdesign1/project/6dfd2c96-abbb-46a3-be3c-7747489f415d?utm_source=github&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":7,"publishedDate":"2025-04-29T21:44:37.328Z"},"vulns":[]}'
Summary
Even though query.d.ts says otherwise,
Query
does NOT in fact have the following methods:findById
findByIdAndUpdate
findByIdAndDelete
You can see as much if you try to call them. Here's a reproducible example:
That example gives zero Typescript warnings because it thinks
findById
,findByIdAndUpdate
, andfindByIdAndDelete
are all valid methods onQuery
. But when you actually run it, you get the following output:One place where this distinction matters is with the
accessibleBy
casl plugin. This comment references the problem, but no action was taken to address the root cause.I'm not sure if the type declarations were included by mistake (here and here), or if the implementations used to exist and were deleted at some point.
I don't see the harm in including the implementations, so that's what this PR adds. Basic tests included.