diff --git a/pom.xml b/pom.xml
index 366786fc6d..5fe46fcc0a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
 	<groupId>org.springframework.data</groupId>
 	<artifactId>spring-data-mongodb-parent</artifactId>
-	<version>4.2.0-SNAPSHOT</version>
+	<version>4.2.x-4502-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
 	<name>Spring Data MongoDB</name>
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 2de4b6b635..90e4b7e7a6 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>org.springframework.data</groupId>
 		<artifactId>spring-data-mongodb-parent</artifactId>
-		<version>4.2.0-SNAPSHOT</version>
+		<version>4.2.x-4502-SNAPSHOT</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 41b81f9aa6..45475aab9e 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
 	<parent>
 		<groupId>org.springframework.data</groupId>
 		<artifactId>spring-data-mongodb-parent</artifactId>
-		<version>4.2.0-SNAPSHOT</version>
+		<version>4.2.x-4502-SNAPSHOT</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index d7a9ddaa63..52bac214d2 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
 	<parent>
 		<groupId>org.springframework.data</groupId>
 		<artifactId>spring-data-mongodb-parent</artifactId>
-		<version>4.2.0-SNAPSHOT</version>
+		<version>4.2.x-4502-SNAPSHOT</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
index 06aee31afc..1c4e4bb762 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
@@ -1471,26 +1471,29 @@ protected String mapPropertyName(MongoPersistentProperty property) {
 				}
 
 				String nextToken = nextToken();
-				if (isPositionalParameter(nextToken)) {
+				if (property.isMap()) {
 
 					mappedName.append(".").append(nextToken);
 					currentIndex += 2;
 					return mappedName.toString();
 				}
 
-				if (property.isMap()) {
-
+				int i = 1;
+				while (isPositionalParameter(nextToken)) {
 					mappedName.append(".").append(nextToken);
-					currentIndex += 2;
-					return mappedName.toString();
+					i++;
+					nextToken = currentIndex + i < pathParts.size() ?  pathParts.get(currentIndex + i) : "";
 				}
-
-				currentIndex++;
+				currentIndex += i;
 				return mappedName.toString();
 			}
 
 			static boolean isPositionalParameter(String partial) {
 
+				if(!StringUtils.hasText(partial)) {
+					return false;
+				}
+
 				if ("$".equals(partial)) {
 					return true;
 				}
@@ -1500,12 +1503,12 @@ static boolean isPositionalParameter(String partial) {
 					return true;
 				}
 
-				try {
-					Long.valueOf(partial);
-					return true;
-				} catch (NumberFormatException e) {
-					return false;
+				for (int i = 0; i < partial.length(); i++) {
+					if (!Character.isDigit(partial.charAt(i))) {
+						return false;
+					}
 				}
+				return true;
 			}
 		}
 	}
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java
index df1e13aeae..5d8629a5b4 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java
@@ -1350,6 +1350,17 @@ void updateConsidersValueConverterWhenPresent() {
 		assertThat(mappedUpdate).isEqualTo("{ $set : { 'text' : 'eulav' } }");
 	}
 
+	@ParameterizedTest // GH-4502
+	@ValueSource(strings = {"levelOne.levelTwo.1", "levelOne.levelTwo.1.0", "levelOne.levelTwo.2.0",})
+	void objectNestedIntegerFieldCorrectly(String path) {
+
+		Update update = new Update().set(path, "4");
+		Document mappedUpdate = mapper.getMappedObject(update.getUpdateObject(),
+				context.getPersistentEntity(EntityWithNestedObject1.class));
+
+		assertThat(mappedUpdate).isEqualTo(new org.bson.Document("$set", new org.bson.Document(path, "4")));
+	}
+
 	static class DomainTypeWrappingConcreteyTypeHavingListOfInterfaceTypeAttributes {
 		ListModelWrapper concreteTypeWithListAttributeOfInterfaceType;
 	}
@@ -1818,4 +1829,12 @@ static class WithPropertyValueConverter {
 		@ValueConverter(ReversingValueConverter.class)
 		String text;
 	}
+
+	static class EntityWithNestedObject1 {
+		EntityWithNestedObject2 levelOne;
+	}
+
+	static class EntityWithNestedObject2 {
+		Integer levelTwo;
+	}
 }