summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/inclusion_projection_executor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/inclusion_projection_executor.h')
-rw-r--r--src/mongo/db/exec/inclusion_projection_executor.h34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/mongo/db/exec/inclusion_projection_executor.h b/src/mongo/db/exec/inclusion_projection_executor.h
index aef4c07b434..7f505f54797 100644
--- a/src/mongo/db/exec/inclusion_projection_executor.h
+++ b/src/mongo/db/exec/inclusion_projection_executor.h
@@ -173,19 +173,24 @@ private:
*/
class InclusionProjectionExecutor : public ProjectionExecutor {
public:
- InclusionProjectionExecutor(const boost::intrusive_ptr<ExpressionContext>& expCtx,
- ProjectionPolicies policies,
- std::unique_ptr<InclusionNode> root)
- : ProjectionExecutor(expCtx, policies), _root(std::move(root)) {}
-
- InclusionProjectionExecutor(const boost::intrusive_ptr<ExpressionContext>& expCtx,
- ProjectionPolicies policies,
- bool allowFastPath = false)
+ InclusionProjectionExecutor(
+ const boost::intrusive_ptr<ExpressionContext>& expCtx,
+ ProjectionPolicies policies,
+ std::unique_ptr<InclusionNode> root,
+ boost::optional<projection_ast::ProjectionPathASTNode> proj = boost::none)
+ : ProjectionExecutor(expCtx, policies, proj), _root(std::move(root)) {}
+
+ InclusionProjectionExecutor(
+ const boost::intrusive_ptr<ExpressionContext>& expCtx,
+ ProjectionPolicies policies,
+ bool allowFastPath = false,
+ boost::optional<projection_ast::ProjectionPathASTNode> proj = boost::none)
: InclusionProjectionExecutor(
expCtx,
policies,
allowFastPath ? std::make_unique<FastPathEligibleInclusionNode>(policies)
- : std::make_unique<InclusionNode>(policies)) {}
+ : std::make_unique<InclusionNode>(policies),
+ proj) {}
TransformerType getType() const final {
return TransformerType::kInclusionProjection;
@@ -202,16 +207,17 @@ public:
/**
* Serialize the projection.
*/
- Document serializeTransformation(
- boost::optional<ExplainOptions::Verbosity> explain) const final {
+ Document serializeTransformation(boost::optional<ExplainOptions::Verbosity> explain,
+ const SerializationOptions& options = {}) const final {
MutableDocument output;
// The InclusionNode tree in '_root' will always have a top-level _id node if _id is to be
// included. If the _id node is not present, then explicitly set {_id: false} to avoid
// ambiguity in the expected behavior of the serialized projection.
- _root->serialize(explain, &output);
- if (output.peek()["_id"].missing()) {
- output.addField("_id", Value{false});
+ _root->serialize(explain, &output, options);
+ auto idFieldName = options.serializeFieldPath("_id");
+ if (output.peek()[idFieldName].missing()) {
+ output.addField(idFieldName, Value{false});
}
return output.freeze();