Java 将MongoDB集合转换为嵌套对象的数组
我的mongo数据采用以下格式:Java 将MongoDB集合转换为嵌套对象的数组,java,mongodb,spring-boot,mongodb-query,aggregation-framework,Java,Mongodb,Spring Boot,Mongodb Query,Aggregation Framework,我的mongo数据采用以下格式: { country: "Bangladesh", city: "Dhaka", name: "Jobayer", email: "jobayer@gmail.com" } { country: "Bangladesh", city: "Dhaka", name: "Mehotaz", email: "mehotaz
{ country: "Bangladesh", city: "Dhaka", name: "Jobayer", email: "jobayer@gmail.com" }
{ country: "Bangladesh", city: "Dhaka", name: "Mehotaz", email: "mehotaz@gmail.com" }
{ country: "KSA", city: "Dammam", name: "Jabal", email: "jabal@gmail.com" }
我想检索如下所示的数据:
[
{
country: 'Bangladesh',
cities: [
{
city: 'Dhaka',
contacts: [
{
name: 'Jobayer',
email: 'jobayer@gmail.com'
},
{
name: 'Mehotaz',
email: 'mehotaz@gmail.com'
}
]
}
]
},
{
country: 'KSA',
cities: [
{
city: 'Dammam',
contacts: [
{
name: 'Jabal',
email: 'jabal@gmail.com'
}
]
}
]
}
];
我尝试了一些集体行动,但没有得到预期的结果。请就如何实现这一目标提供您宝贵的建议。您要做的是两次
$group
,一次是在国家x城市
上,然后是在国家,如下所示:
db.collection.aggregate([
{
$group: {
_id: {
country: "$country",
city: "$city"
},
contacts: {
$push: {
name: "$name",
email: "$email"
}
}
}
},
{
$group: {
_id: "$_id.country",
cities: {
$push: {
city: "$_id.city",
contacts: "$contacts"
}
}
}
}
])
您要做的是两次
$group
,一次在国家/地区x城市
上,然后在国家/地区上,如下所示:
db.collection.aggregate([
{
$group: {
_id: {
country: "$country",
city: "$city"
},
contacts: {
$push: {
name: "$name",
email: "$email"
}
}
}
},
{
$group: {
_id: "$_id.country",
cities: {
$push: {
city: "$_id.city",
contacts: "$contacts"
}
}
}
}
])
非常感谢。很好,非常感谢。它很好用。