2014-10-08 90 views
0

以下数据存储在MongoDB中。我正在使用Spring-Data并将数据存储到mongoDB中。 如果我想检索字段(“id”或“Name”),我可以做,但如果我想检索子字段(“firstName”或“lastName”),我不能。从mongoDB中检索嵌入文档

(eg。)如果我想从下面的数据中检索子字段“lastName”,我不能。在这方面,请亲爱的帮助我。 在此先感谢。

数据MongoDB中存储:

{ 

"id":101, 

"name": {"firstName":"Mark", 

     "lastName":"Antony" 

     } 
} 

我使用的代码是:

PersonService.java

public List<Audit> searchPerson(Audit audit) 
{ 
List<NameDetails> name=audit.getName(); 
return mongoTemplate.find(new Query(Criteria.where("name.lastName").is(name.get(0))), Audit.class,COLLECTION_NAME); 
} 

PersonController.java

@RequestMapping(value = "/person/search", method = RequestMethod.GET) 
public String search(@ModelAttribute Audit audit, ModelMap model) { 
model.addAttribute("personList", personService.searchPerson(audit)); 
return "output"; 
} 

Audit.java

@Document 
public class Audit { 
@Id 
private String id; 
private List<NameDetails> name; 

public String getId() { 
    System.out.println("Person: getId"); 
    return id; 
} 
public void setId(String id) { 
    System.out.println("Person: setId"); 
    this.id = id; 
} 
public List<NameDetails> getName() { 
    System.out.println("Audit: getName"); 
    return name; 
} 
public void setName(List<NameDetails> name) { 
    System.out.println("Audit: setName"); 
    this.name = name; 
}  

} 

NameDetails.java

package com.register.mongo.model; 

public class NameDetails { 
private String firstName; 
private String lastName; 

public String getFirstName() { 
return firstName; 
} 
public void setFirstName(String firstName) { 
System.out.println("NameDetails: setFirstName"); 
this.firstName = firstName; 
} 
public String getLastName() { 
System.out.println("NameDetails: getLastName"); 
return lastName; 
} 
public void setLastName(String lastName) { 
System.out.println("NameDetails: setLastName"); 
this.lastName = lastName; 
} 
} 

(output.jsp的)UI页

<form action="person/search" method="get"> 
<table> 
<tr><td> 
<label>Name</label> 
<input type="text" id="lastName" name="lastName"/> 
</td></tr> 
<tr><td> 
<input type="submit" value="Search"/> 
</td></tr> 
</table> 
</form>  

<table border="2"> 
<c:forEach var="person" items="${personList}"> 
<tr> 
<td>${person.id}</td> 
</tr> 
<tr> 
<td>${person.lastName}</td> 
</tr> 
</c:forEach> 
</table>  

回答

0

变化

return mongoTemplate.find(
    new Query(Criteria.where("name.lastName").is(name.get(0))), 
    Audit.class,COLLECTION_NAME); 

return mongoTemplate.find(
    new Query(Criteria.where("name.lastName").is(name.get(0).getLastName())), 
    Audit.class,COLLECTION_NAME); 

您正在尝试使用整个NameDetails而不是最后一个名称。

+0

感谢您的关注。我已经完成了你所说的,但是它抛出空指针异常 – yoganandh 2014-10-09 06:47:28

+0

在哪一行抛出NPE? – 2014-10-09 10:59:45

+0

在return语句中。在这一行错误:return mongoTemplate.find( new Query(Criteria.where(“name.lastName”)。is(name.get(0).getLastName())), Audit.class,COLLECTION_NAME); – yoganandh 2014-10-09 12:01:50