summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/exclusion_projection_executor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/exclusion_projection_executor.h')
-rw-r--r--src/mongo/db/exec/exclusion_projection_executor.h21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/mongo/db/exec/exclusion_projection_executor.h b/src/mongo/db/exec/exclusion_projection_executor.h
index d7a441e3b5c..37623206723 100644
--- a/src/mongo/db/exec/exclusion_projection_executor.h
+++ b/src/mongo/db/exec/exclusion_projection_executor.h
@@ -99,10 +99,12 @@ protected:
*/
class ExclusionProjectionExecutor : public ProjectionExecutor {
public:
- ExclusionProjectionExecutor(const boost::intrusive_ptr<ExpressionContext>& expCtx,
- ProjectionPolicies policies,
- bool allowFastPath = false)
- : ProjectionExecutor(expCtx, policies), _root(new ExclusionNode(_policies)) {}
+ ExclusionProjectionExecutor(
+ const boost::intrusive_ptr<ExpressionContext>& expCtx,
+ ProjectionPolicies policies,
+ bool allowFastPath = false,
+ boost::optional<projection_ast::ProjectionPathASTNode> proj = boost::none)
+ : ProjectionExecutor(expCtx, policies, proj), _root(new ExclusionNode(_policies)) {}
TransformerType getType() const final {
return TransformerType::kExclusionProjection;
@@ -116,16 +118,17 @@ public:
return _root.get();
}
- Document serializeTransformation(
- boost::optional<ExplainOptions::Verbosity> explain) const final {
+ Document serializeTransformation(boost::optional<ExplainOptions::Verbosity> explain,
+ const SerializationOptions& options = {}) const final {
MutableDocument output;
// The ExclusionNode tree in '_root' will always have a top-level _id node if _id is to be
// excluded. If the _id node is not present, then explicitly set {_id: true} to avoid
// ambiguity in the expected behavior of the serialized projection.
- _root->serialize(explain, &output);
- if (output.peek()["_id"].missing()) {
- output.addField("_id", Value{true});
+ _root->serialize(explain, &output, options);
+ auto idFieldName = options.serializeFieldPath("_id");
+ if (output.peek()[idFieldName].missing()) {
+ output.addField(idFieldName, Value{true});
}
return output.freeze();
}