如何以数组格式检索数据 mongoDb Spring Boot

How to retrive data in array format mongoDb SpringBoot

我的 mongoDB 中有如下数据

{
    "stack":"webTechnology",
    "subStack":"angular"
},
{
    "stack":"webTechnology",
    "subStack":"react"
}.
{
    "stack":"webTechnology",
    "subStack":"angular"
},
{
    "stack":"script",
    "subStack":"python"
},
{
    "stack":"script",
    "subStack":"javaScript"
},
{
    "stack":"Java",
    "subStack":"Spring"
}

我需要 return 这些数据作为来自 Rest API 的响应,格式如下, 按堆栈和子堆栈分类

[
    "webTechnology":[
        "angular":[
            {
                "stack":"webTechnology",
                "subStack":"angular"
            },
            {
                "stack":"webTechnology",
                "subStack":"angular"
            }
        ],
        "react":[
            {
                "stack":"webTechnology",
                "subStack":"react"
            }
        ]
    ],
    "script":[
        "python":[
            {
                "stack":"script",
                "subStack":"python"
            }
        ],
        "javaScript":[
            {
                "stack":"script",
                "subStack":"javaScript"
            }
        ]
    ],
    "java":[
        "spring":[
            {
                "stack":"java",
                "subStack":"spring"
            }
        ]
    ]
]

我正在使用 mongoTemplate 检索数据,return以列表格式

mongoTemplate.getCollection(collectionName).find().toArray()

如何才能得到我期望的结果?

我将您的数据插入临时集合 dataCollection,这里是按 stacksubstack 分组数据的查询:

db.getCollection('dataCollection').aggregate([

    {

          $group: {
                _id: {stack: "$stack", subStack: "$subStack"},
                result: { $push : "$$ROOT" }

              }

    }

])

将查询转换为 mongotemplate 格式应该不难;如果您有任何问题,请告诉我。

输出:

/* 1 */
{
    "_id" : {
        "stack" : "Java",
        "subStack" : "Spring"
    },
    "result" : [ 
        {
            "_id" : ObjectId("5aaf5b65f2046e3bf671328a"),
            "stack" : "Java",
            "subStack" : "Spring"
        }
    ]
}

/* 2 */
{
    "_id" : {
        "stack" : "webTechnology",
        "subStack" : "angular"
    },
    "result" : [ 
        {
            "_id" : ObjectId("5aaf5b65f2046e3bf6713285"),
            "stack" : "webTechnology",
            "subStack" : "angular"
        }, 
        {
            "_id" : ObjectId("5aaf5b65f2046e3bf6713287"),
            "stack" : "webTechnology",
            "subStack" : "angular"
        }
    ]
}

/* 3 */
{
    "_id" : {
        "stack" : "script",
        "subStack" : "python"
    },
    "result" : [ 
        {
            "_id" : ObjectId("5aaf5b65f2046e3bf6713288"),
            "stack" : "script",
            "subStack" : "python"
        }
    ]
}

/* 4 */
{
    "_id" : {
        "stack" : "webTechnology",
        "subStack" : "react"
    },
    "result" : [ 
        {
            "_id" : ObjectId("5aaf5b65f2046e3bf6713286"),
            "stack" : "webTechnology",
            "subStack" : "react"
        }
    ]
}

/* 5 */
{
    "_id" : {
        "stack" : "script",
        "subStack" : "javaScript"
    },
    "result" : [ 
        {
            "_id" : ObjectId("5aaf5b65f2046e3bf6713289"),
            "stack" : "script",
            "subStack" : "javaScript"
        }
    ]
}