summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/projection_policies.h
diff options
context:
space:
mode:
authorIan Boros <ian.boros@mongodb.com>2019-10-21 22:49:04 +0000
committerevergreen <evergreen@mongodb.com>2019-10-21 22:49:04 +0000
commit1b0927456ed31f6903cdeab64217ada8415f0c95 (patch)
tree9188241c22a047f8a2c9448b3be68e13b9871c7d /src/mongo/db/query/projection_policies.h
parent5b749ef0105d92a2a3318c01d622f25201cd7bb8 (diff)
downloadmongo-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.h29
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