diff options
author | Ian Boros <ian.boros@mongodb.com> | 2019-10-21 22:49:04 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-10-21 22:49:04 +0000 |
commit | 1b0927456ed31f6903cdeab64217ada8415f0c95 (patch) | |
tree | 9188241c22a047f8a2c9448b3be68e13b9871c7d /src/mongo/db/query/projection_policies.h | |
parent | 5b749ef0105d92a2a3318c01d622f25201cd7bb8 (diff) | |
download | mongo-1b0927456ed31f6903cdeab64217ada8415f0c95.tar.gz |
SERVER-42988 allow agg-style object syntax in find() projection
Diffstat (limited to 'src/mongo/db/query/projection_policies.h')
-rw-r--r-- | src/mongo/db/query/projection_policies.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/mongo/db/query/projection_policies.h b/src/mongo/db/query/projection_policies.h index c72790037ca..3326e2e3f92 100644 --- a/src/mongo/db/query/projection_policies.h +++ b/src/mongo/db/query/projection_policies.h @@ -52,22 +52,43 @@ struct ProjectionPolicies { // projections. Computed fields are implicitly prohibited by exclusion projections. enum class ComputedFieldsPolicy { kBanComputedFields, kAllowComputedFields }; + // Whether $elemMatch, find() $slice and positional projection are allowed. + enum class FindOnlyFeaturesPolicy { kBanFindOnlyFeatures, kAllowFindOnlyFeatures }; + static const DefaultIdPolicy kDefaultIdPolicyDefault = DefaultIdPolicy::kIncludeId; static const ArrayRecursionPolicy kArrayRecursionPolicyDefault = ArrayRecursionPolicy::kRecurseNestedArrays; static const ComputedFieldsPolicy kComputedFieldsPolicyDefault = ComputedFieldsPolicy::kAllowComputedFields; + static const FindOnlyFeaturesPolicy kFindOnlyFeaturesPolicyDefault = + FindOnlyFeaturesPolicy::kBanFindOnlyFeatures; + + static ProjectionPolicies findProjectionPolicies() { + return ProjectionPolicies{ + ProjectionPolicies::kDefaultIdPolicyDefault, + ProjectionPolicies::kArrayRecursionPolicyDefault, + ProjectionPolicies::kComputedFieldsPolicyDefault, + ProjectionPolicies::FindOnlyFeaturesPolicy::kAllowFindOnlyFeatures}; + } - ProjectionPolicies(DefaultIdPolicy idPolicy = kDefaultIdPolicyDefault, - ArrayRecursionPolicy arrayRecursionPolicy = kArrayRecursionPolicyDefault, - ComputedFieldsPolicy computedFieldsPolicy = kComputedFieldsPolicyDefault) + ProjectionPolicies( + DefaultIdPolicy idPolicy = kDefaultIdPolicyDefault, + ArrayRecursionPolicy arrayRecursionPolicy = kArrayRecursionPolicyDefault, + ComputedFieldsPolicy computedFieldsPolicy = kComputedFieldsPolicyDefault, + FindOnlyFeaturesPolicy findOnlyFeaturesPolicy = kFindOnlyFeaturesPolicyDefault) : idPolicy(idPolicy), arrayRecursionPolicy(arrayRecursionPolicy), - computedFieldsPolicy(computedFieldsPolicy) {} + computedFieldsPolicy(computedFieldsPolicy), + findOnlyFeaturesPolicy(findOnlyFeaturesPolicy) {} const DefaultIdPolicy idPolicy; const ArrayRecursionPolicy arrayRecursionPolicy; const ComputedFieldsPolicy computedFieldsPolicy; + const FindOnlyFeaturesPolicy findOnlyFeaturesPolicy; + + bool findOnlyFeaturesAllowed() const { + return findOnlyFeaturesPolicy == FindOnlyFeaturesPolicy::kAllowFindOnlyFeatures; + } }; } // namespace mongo |