Проблема агрегации GraphLookup [Spring Data Mongodb] - PullRequest
0 голосов
/ 26 марта 2019

У меня есть следующий документ Категория:

data class Category(
    @Id override val id: String? = null,
    val name: String? = null,
    val parentId: ObjectId? = null,
    val description: String? = null,
    val coverImagePath: String? = null,
    val subCategoriesNum: Int = 0,
    val productsNum: Int = 0,
    override val createdDate: Instant? = null,
    override val lastModifiedDate: Instant? = null)

и я хочу получить список категорий от листа к корневой категории. Для этого у меня есть следующий код:

        val aggregation = Aggregation.newAggregation(
            Category::class.java,
            Aggregation
                .graphLookup("categories")
                .startWith("id") // PROBLEM WITH ID (MUST BE _ID)
                .connectFrom("parentId")
                .connectTo("id")
                .`as`("parents"))

        return mongoOperations.aggregate(aggregation, CategoryResult::class.java)

Полученный запрос выглядит следующим образом:

{
  "aggregate": "__collection__",
  "pipeline": [
    {
      "$graphLookup": {
        "from": "categories",
        "startWith": "$id",
        "connectFromField": "parentId",
        "connectToField": "id",
        "as": "parents"
      }
    }
  ]
}

но правильный запрос должен быть таким:

 {
      $graphLookup: {
        "from" : "categories", 
        "startWith" : "$_id",
        "connectFromField": "parentId", 
        "connectToField" :"_id",
        "as" : "parents"
      }
   }

Как я могу получить правильный запрос? Кроме того, с данными Spring mongodb я могу получить преобразование из строки в objectid для сравнения между parentId и id?

Спасибо

...