Je rencontre un problème lors de mappage Résultat lors de l'utilisation des opérations de déroulement dans l'agrégation.getMappedResults() ne mappe pas correctement le résultat brut
Voici mes dépendances. Ci-dessous la dépendance que j'ai mentionné les deux classes de modèle que j'utilise avec le code d'agrégation à la fin. J'obtiens des données dans le résultat dans la requête native aussi bien que dans la requête Spring. Mais la différence est que le résultat de la requête Spring même si a des documents, le tableau orgMap est vide. Alors que le document renvoyé par la requête native a une donnée pour chaque document dans le tableau orgMap.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- mongodb java driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.0</version>
</dependency>
<!-- Spring data mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.3.RELEASE</version>
</dependency>
package com.mongodb.model.user;
import java.util.HashSet;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
import com.alta.mongodb.model.user.UserOrgMap;
@Document(collection = "users")
public class Users {
public Users() {
super();
}
@PersistenceConstructor
public Users(String userId, String login, String firstName, String lastName,
HashSet<UserOrg> userOrg) {
super();
this.userId = userId;
this.login = login;
this.firstName = firstName;
this.lastName = lastName;
this.userOrgMap = userOrgMap;
}
@Id
private String userId;
private String login;
private String firstName;
private String lastName;
private HashSet<UserOrgMap> userOrgMap;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public HashSet<UserOrgMap> getUserOrgMap() {
return userOrgMap;
}
public void setUserOrgMap(HashSet<UserOrgMap> userOrgMap) {
this.userOrgMap = userOrgMap;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
result = prime * result + ((login == null) ? 0 : login.hashCode());
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
result = prime * result + ((userOrgMap == null) ? 0 : userOrgMap.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Users other = (Users) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
if (login == null) {
if (other.login != null)
return false;
} else if (!login.equals(other.login))
return false;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
if (userOrgMap == null) {
if (other.userOrgMap != null)
return false;
} else if (!userOrgMap.equals(other.userOrgMap))
return false;
return true;
}
@Override
public String toString() {
return "Users [userId=" + userId + ", login=" + login + ", firstName=" + firstName + ", lastName=" + lastName
+ ", userOrgMap=" + userOrgMap + "]";
}
}
package com.mongodb.model.user;
import org.springframework.data.annotation.PersistenceConstructor;
public class UserOrg {
private String orgId;
private String createdbyuser;
public UserOrg() {
super();
}
public UserOrg(String orgId, String createdbyuser) {
super();
this.orgId = orgId;
this.createdbyuser = createdbyuser;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getCreatedbyuser() {
return createdbyuser;
}
public void setCreatedbyuser(String createdbyuser) {
this.createdbyuser = createdbyuser;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((createdbyuser == null) ? 0 : createdbyuser.hashCode());
result = prime * result + ((orgId == null) ? 0 : orgId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserOrg other = (UserOrg) obj;
if (createdbyuser == null) {
if (other.createdbyuser != null)
return false;
} else if (!createdbyuser.equals(other.createdbyuser))
return false;
if (orgId == null) {
if (other.orgId != null)
return false;
} else if (!orgId.equals(other.orgId))
return false;
return true;
}
@Override
public String toString() {
return "UserOrg [orgId=" + orgId + ", createdbyuser=" + createdbyuser + "]";
}
}
Aggregation aggregation = newAggregation(
unwind("userOrgMap")
);
AggregationResults<User> groupResults = mongoOperation.aggregate(aggregation,"users", User.class);
System.out.println(" groupResults raw result "+groupResults.getRawResults().get("result"));
List<User> result = groupResults.getMappedResults();
System.out.println(" result "+result);
Output :
groupResults raw result
[ { "_id" : "user_1" , "login" : "123" , "firstName" : "abc" , "lastName" : "xyz" , "userOrgMap" : { "orgId" : "org_1" , "createdbyuser" : "user_2" } ,
{ "_id" : "user_2" , "login" : "789" , "firstName" : "qqq" , "lastName" : "aaa" , "userOrgMap" : { "orgId" : "org_1" , "createdbyuser" : "user_3" }
]
result
[
User [userId=user_1, login=123, firstName=abc, lastName=xyz, userOrgMap=[] ],
User [userId=user_2, login=789, firstName=qqq, lastName=aaa, userOrgMap=[],]
]
I want to know why userOrgMap array is empty instead of having value similar to the output shown for raw results.
Vous attendez 'le document userOrgMap' à la carte type de collection qui est impossible et donc retour du printemps comme tableau vide. Vous pouvez créer un 'userDTO' avec' userOrgMap' comme 'UserOrg' au lieu de' Set 'et d'autres champs. Cela devrait correspondre correctement. Btw, je ne suis pas sûr de savoir pourquoi le mapper à 'users'class. Je peux vous aider davantage si vous pouvez partager exactement ce que vous essayez d'accomplir. –
Veeram
Le modèle utilisateur réel a beaucoup d'attributs. Ce que j'avais posté est une version minifiée de celui-ci. Dans ma mise en œuvre actuelle, c'est userOrgMap. Mais encore l'arry est vide. – karmaker
Mon exigence est de dérouler un tableau à l'intérieur d'un document et obtenir plusieurs documents mappés au modèle de document. – karmaker