[SERVER-27969] $group with dotted path name in _id fails Created: 10/Feb/17  Updated: 27/Oct/23  Resolved: 17/Feb/17

Status: Closed
Project: Core Server
Component/s: Aggregation Framework
Affects Version/s: 3.4.2
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Bijith Kumar Assignee: Backlog - Query Team (Inactive)
Resolution: Works as Designed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Documented
is documented by DOCS-9919 Add note about dotted field names wit... Closed
Assigned Teams:
Query
Operating System: ALL
Steps To Reproduce:

1. execute any query with a dot in $group aggregation field as shown in e.g. below on v3.2 and v3.4
db.MyCollection.aggregate({$group: {"_id":

{ "d.N" : "$N"}

}})

2. Observe that the query executes successfully on v3.2 but fails on v3.4 with following error.
{ ok: 0.0, errmsg: \"FieldPath field names may not contain '.'.\", code: 16412, codeName: \"Location16412\", $gleStats:

{ lastOpTime: Timestamp 0|0, electionId: ObjectId('000000000000000000000000') }

}" }

Participants:
Case:

 Description   

$group aggregate field names can contain dots as of v3.2. However, such queries fail in v3.4 with exception provided below.
Also, this incompatibility is not listed here - https://docs.mongodb.com/manual/release-notes/3.4-compatibility/

com.mongodb.MongoCommandException: Command failed with error 16412: 'sharded pipeline failed on shard analytics1-1: { ok: 0.0, errmsg: "FieldPath field names may not contain '.'.", code: 16412, codeName: "Location16412", $gleStats: { lastOpTime: Timestamp 0|0, electionId: ObjectId('000000000000000000000000') } }' on server localhost:27017. The full response is { "code" : 16412, "ok" : 0.0, "errmsg" : "sharded pipeline failed on shard analytics1-1: { ok: 0.0, errmsg: \"FieldPath field names may not contain '.'.\", code: 16412, codeName: \"Location16412\", $gleStats: { lastOpTime: Timestamp 0|0, electionId: ObjectId('000000000000000000000000') } }" }
	at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:173) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:215) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:206) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:112) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.AggregateOperation$1.call(AggregateOperation.java:227) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.AggregateOperation$1.call(AggregateOperation.java:223) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:239) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:212) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.AggregateOperation.execute(AggregateOperation.java:223) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.operation.AggregateOperation.execute(AggregateOperation.java:65) ~[mongodb-driver-core-3.2.2.jar:?]
	at com.mongodb.Mongo.execute(Mongo.java:772) ~[mongodb-driver-3.2.2.jar:?]
	at com.mongodb.Mongo$2.execute(Mongo.java:759) ~[mongodb-driver-3.2.2.jar:?]
	at com.mongodb.OperationIterable.iterator(OperationIterable.java:47) ~[mongodb-driver-3.2.2.jar:?]
	at com.mongodb.AggregateIterableImpl.iterator(AggregateIterableImpl.java:102) ~[mongodb-driver-3.2.2.jar:?]
	at net.nativo.mongo.dao.MongoDAO.executeAggregate(MongoDAO.java:101) ~[classes/:?]
	at net.nativo.mongo.dao.MongoDAO.aggregate(MongoDAO.java:70) ~[classes/:?]
	at net.nativo.reporting.generator.AbstractReportGenerator.executeMongoQuery(AbstractReportGenerator.java:402) ~[classes/:?]
	at net.nativo.reporting.generator.AbstractReportGenerator.generateReport(AbstractReportGenerator.java:161) ~[classes/:?]
	at net.nativo.reporting.generator.AbstractReportGenerator.generate(AbstractReportGenerator.java:124) [classes/:?]
	at net.nativo.reporting.controller.ReportController.getPerformanceReport(ReportController.java:113) [classes/:?]
	at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_111]
	at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_111]
	at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) [spring-web-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) [spring-web-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:685) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) [tomcat7-servlet-3.0-api.jar:?]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) [spring-webmvc-3.2.10.RELEASE.jar:3.2.10.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) [tomcat7-servlet-3.0-api.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.70]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.70]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.70]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.70]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.70]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) [catalina.jar:7.0.70]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.70]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [catalina.jar:7.0.70]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) [catalina.jar:7.0.70]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.70]
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) [catalina.jar:7.0.70]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.70]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) [catalina.jar:7.0.70]
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082) [tomcat-coyote.jar:7.0.70]
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623) [tomcat-coyote.jar:7.0.70]
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) [tomcat-coyote.jar:7.0.70]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_111]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.70]
	at java.lang.Thread.run(Thread.java:745) [?:1.7.0_111]

Found an old ticket for v2.2 which looks related in case it helps - https://jira.mongodb.org/browse/SERVER-6198



 Comments   
Comment by Charlie Swanson [ 17/Feb/17 ]

Hi bijithkumar,

This was actually an intentional change introduced as part of our work for the 3.4 release. Dotted field names are not allowed within MongoDB, so they shouldn't be allowed within an aggregation pipeline either.

You are absolutely correct that this should appear in the release notes. I've filed DOCS-9919 to track this work. Please watch and upvote that ticket.

Comment by Mark Agarunov [ 10/Feb/17 ]

Hello bkumar@nativo.net

Thank you for the report. We were able to reproduce the issue you've described and are investigating, please watch the ticket for further updates.

Thanks,
Mark

Generated at Thu Feb 08 04:16:45 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.