У меня есть следующий документ Категория:
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?
Спасибо