如何使用 Spring 数据 Mongo 从 Mongo 多个文档中获取所有嵌入文档
How to fetch all embedded document from the Mongo multiple documents using Spring Data Mongo
我正在使用 Spring 数据 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
被嵌入到用户集合中。如何获取所有唯一地址或所有地址?我想为此编写服务。
我需要为此创建索引吗?
您必须创建一个名为 Address 的 POJO class,您必须在其中将其字段定义为:
public class Address {
private String addressLineOne;
private String addressLineTwo;
private String city;
private String country;
// getters and setters
}
然后,你要修改你的 User.java class :
public class User {
private String id;
// other fields
private Address address;
// other fields
}
Spring 的 jackson 库会自动将这些字段绑定到您的 POJO。
现在,当您尝试获取地址字段时,您将使用以下方法获取:
System.out.println(user.getAddress.getAddressLineOne);
System.out.println(user.getAddress.getCity);
这可以在 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);
}
我正在使用 Spring 数据 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
被嵌入到用户集合中。如何获取所有唯一地址或所有地址?我想为此编写服务。
我需要为此创建索引吗?
您必须创建一个名为 Address 的 POJO class,您必须在其中将其字段定义为:
public class Address {
private String addressLineOne;
private String addressLineTwo;
private String city;
private String country;
// getters and setters
}
然后,你要修改你的 User.java class :
public class User {
private String id;
// other fields
private Address address;
// other fields
}
Spring 的 jackson 库会自动将这些字段绑定到您的 POJO。
现在,当您尝试获取地址字段时,您将使用以下方法获取:
System.out.println(user.getAddress.getAddressLineOne);
System.out.println(user.getAddress.getCity);
这可以在 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);
}