fix(bigint): throw error when casting BigInt that's outside of the bounds of what MongoDB can safely store #15230
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 #15200
Summary
MongoDB stores BigInts as Longs under the hood, so you may lose precision if storing a BigInt that's too large in MongoDB. This PR makes Mongoose throw an error in that case, to avoid accidentally overwriting valid data.
Without
useBigInt64, MongoDB can only store the range of a signed 64 bit integer, which is what this check uses. WithuseBigInt64, you can actually store up to the max unsigned 64 bit integer (18446744073709551615), but that leads to some unexpected quirks with querying. For example, the following$gtquery doesn't return any docs even though18446744073709551615n > 9223372036854775807n.Although this is more of a bug fix than anything, I think postponing it to a smaller minor release is prudent just in case.
Examples