fix: remove conflicting child projections when parent path excluded #15807
+615
−565
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix: Prevent Parent–Child Projection Collisions in Mongoose (#12798 )
Overview
This pull request fixes an issue where Mongoose generates invalid MongoDB projections when both a parent path and its nested child path are excluded. This occurs when combining:
select: falsefields.select('-parent')projectionsMongoDB does not allow excluding both a parent and its child paths at the same time, resulting in a Path collision error.
The Problem
Given the following schema:
Running this query:
Currently results in this projection:
MongoDB error:
The Fix
This PR ensures that nested child exclusions are removed automatically when the parent path is already excluded.
Correct behavior after fix:
A new helper —
removeConflictingProjections()— cleans up the projection before it is returned and forwarded to MongoDB.Implementation Details
Updated
parseProjection.jsAdded
removeConflictingProjections():Ensures compatibility with:
select: false.select()usageTests Added
A new test validates that: