Spring - возврат вложенных документов с использованием агрегации - PullRequest
0 голосов
/ 02 мая 2020

У меня есть 2 класса

class Team
{
    @Id
    var lateint id : String

    var name : String? = null

    var stadium : String? = null

    var players : List<Players>? = null
}

class Player
{
    @Id
    var lateint id : String

    var firstName : String? = null

    var lastName : String? = null

    var post : PlayerPost? = null

    var number : Int? = null
}

Я пытаюсь получить отфильтрованный список игроков определенной команды c, но я всегда получаю неправильный результат.

это моя просьба

val teamCriteria = Criteria.where("_id").`is`(teamId)

val postCriteria = Criteria.where("post").`is`("DEFENDER")

val aggregation = Aggregation.newAggregation(
    Aggregation.match(teamCriteria),
    Aggregation.unwind("players"),
    Aggregation.match(postCriteria),
)

return mongoDb.aggregate(aggregation, Team::class.java, Player::class.java).mappedResults

Проблема в том, что вместо получения списка игроков в результате получается команда, дублирующаяся на число ожидаемых игроков ..

ожидаемый результат

[
    {
        "id" : "id1",
        "firstName" : "player1"
        "lastName" : "player1",
        "number" : 2,
        "post" : "DEFENDER"
    },
    {
        "id" : "id2",
        "firstName" : "player2"
        "lastName" : "player2",
        "number" : 3,
        "post" : "DEFENDER"
    }
]

я всегда получаю этот результат

[
    {
        "id" : "id1",
        "name" : "team name"
        "stadium" : "stadium name",
        "players" : []
    },
    {
        "id" : "id1",
        "name" : "team name"
        "stadium" : "stadium name",
        "players" : []
    }
]

Может ли один и тот же сказать мне, что не так в моем коде?

...