如何使用Spring Data Mongo从Mongo多文档中获取所有嵌入文档

问题描述 投票:0回答:2

我正在使用Spring Data Mongo,我在mongoDB中有近10,000个文档。我正在使用Spring Boot + Spring Data Mongo的例子。

我有以下文件,每个文件都有一些独特而通用的地址:

{
  "_id" : ObjectId("592c7029aafef820f432c5f3"),
  "_class" : "lankydan.tutorial.mongodb.documents.Person",
  "firstName" : "John",
  "secondName" : "Doe",
  "dateOfBirth" : ISODate("2017-05-29T20:02:01.636+01:00"),
  "address" : {
    "addressLineOne" : "19 Imaginary Road",
    "addressLineTwo" : "Imaginary Place",
    "city" : "Imaginary City",
    "country" : "US"
  },
  "profession" : "Winner",
  "salary" : 100,
  "hobbies" : [ 
    {
      "name" : "Badminton"
    }, 
    {
      "name" : "TV"
    }
  ]
} 

因为,address嵌入到User集合中。如何获取所有唯一地址或所有地址?我想为此写服务。

我需要为此创建索引吗?

mongodb spring-data-mongodb
2个回答
0
投票

您必须创建一个名为Address的POJO类,您必须在其中将其字段定义为:

 public class Address {

 private String addressLineOne;
 private String addressLineTwo;
 private String city;
 private String country;

// getters and setters

}

然后,您必须修改User.java类:

public class User {

private String id;
// other fields    
private Address address;
// other fields

}

Spring的jackson liberary将自动将这些字段绑定到您的POJO。

现在,当您尝试获取地址的字段时,您将通过以下方式获得:

System.out.println(user.getAddress.getAddressLineOne);
System.out.println(user.getAddress.getCity);

0
投票

这可以在最新版本的Spring Boot Starter Parent 2.1.4.RELEASE中根据Spring Data Mongo Docs简单地实现

List<Object> object = mongoTemplate.query(User.class).distinct("address").all();
for (Object object2 : object) {
    Address address = (address) object2;
    System.out.println(address);
}
© www.soinside.com 2019 - 2024. All rights reserved.