summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_geo_near.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
commit959575a5ca598bf5f37fb5cebe7ed1d80d3d71f7 (patch)
treeacc8d60aedb12b70048e676e8a7349deb0010db8 /src/mongo/db/pipeline/document_source_geo_near.cpp
parent76588293975fc059cf076779e4283e6ffaf8afff (diff)
New upstream version 6.0.20upstream
Diffstat (limited to 'src/mongo/db/pipeline/document_source_geo_near.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_geo_near.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/mongo/db/pipeline/document_source_geo_near.cpp b/src/mongo/db/pipeline/document_source_geo_near.cpp
index 1ee840df794..dc4aa5f8be6 100644
--- a/src/mongo/db/pipeline/document_source_geo_near.cpp
+++ b/src/mongo/db/pipeline/document_source_geo_near.cpp
@@ -57,40 +57,45 @@ REGISTER_DOCUMENT_SOURCE(geoNear,
DocumentSourceGeoNear::createFromBson,
AllowedWithApiStrict::kAlways);
-Value DocumentSourceGeoNear::serialize(boost::optional<ExplainOptions::Verbosity> explain) const {
+Value DocumentSourceGeoNear::serialize(const SerializationOptions& opts) const {
MutableDocument result;
if (keyFieldPath) {
- result.setField(kKeyFieldName, Value(keyFieldPath->fullPath()));
+ result.setField(kKeyFieldName, Value(opts.serializeFieldPath(*keyFieldPath)));
}
auto nearValue = [&]() -> Value {
if (auto constGeometry = dynamic_cast<ExpressionConstant*>(_nearGeometry.get());
constGeometry) {
- return constGeometry->getValue();
+ return opts.serializeLiteral(constGeometry->getValue());
} else {
- return _nearGeometry->serialize(static_cast<bool>(explain));
+ return _nearGeometry->serialize(opts);
}
}();
result.setField("near", nearValue);
- result.setField("distanceField", Value(distanceField->fullPath()));
+ result.setField("distanceField", Value(opts.serializeFieldPath(*distanceField)));
if (maxDistance) {
- result.setField("maxDistance", Value(*maxDistance));
+ result.setField("maxDistance", opts.serializeLiteral(*maxDistance));
}
if (minDistance) {
- result.setField("minDistance", Value(*minDistance));
+ result.setField("minDistance", opts.serializeLiteral(*minDistance));
}
- result.setField("query", Value(query));
- result.setField("spherical", Value(spherical));
+ if (opts.transformIdentifiers || opts.literalPolicy != LiteralSerializationPolicy::kUnchanged) {
+ auto matchExpr = uassertStatusOK(MatchExpressionParser::parse(query, pExpCtx));
+ result.setField("query", Value(matchExpr->serialize(opts)));
+ } else {
+ result.setField("query", Value(query));
+ }
+ result.setField("spherical", opts.serializeLiteral(spherical));
if (distanceMultiplier) {
- result.setField("distanceMultiplier", Value(*distanceMultiplier));
+ result.setField("distanceMultiplier", opts.serializeLiteral(*distanceMultiplier));
}
if (includeLocs)
- result.setField("includeLocs", Value(includeLocs->fullPath()));
+ result.setField("includeLocs", Value(opts.serializeFieldPath(*includeLocs)));
return Value(DOC(getSourceName() << result.freeze()));
}