Я использую MongoDB для хранения подкатегорий в категориях и элементов в подкатегориях.Я хотел бы получить основную категорию по элементу.Как я могу сделать это в Spring Data самым простым способом без двунаправленной ссылки?
class Category {
private String id;
//some other attributes
@DbRef
List<Category> subCategories = new ArrayList<>();
@DbRef
List<Item> items = new ArrayList<>();
}
В БД коллекция категорий выглядит примерно так:
{
id: 1,
subcategories: [
2, 3
]
},
{
id: 2,
items: [
001
]
}
Я бынравится находить категорию с идентификатором 1, предоставляя itemID 001 (который является элементом в коллекции Items), через подкатегорию 2, без учета глубины соединений .
Я бы предпочел ленивый способ с умным именованием методов Spring Data Repository, что-то вроде Category findBySubCategoriesItems(Item item)
, но @Query
также очень ценится!
Редактировать: я могу найти подкатегорию из MongoDBконсоль по itemId, но я не знаю, как рекурсивно перейти к корневой категории.Это мой запрос:
db.category.find({ items: { id: ObjectId("someItemId") } })
Я пытался пойти по другому пути, получить категории верхнего уровня и выполнить фильтрацию по элементу, например так: category.*.items.id : someItemId
но, к сожалению, подстановочный знак «любая глубина» не соответствуетподдерживается, как указано в https://jira.mongodb.org/browse/SERVER-267
Редактировать 2: Я читал о GraphLookup, но, насколько я понимаю, он мог найти корневую категорию только если было установлено родительское отношение, и не можетиспользуйте его, когда установлены только дочерние элементы.