Я храню какую-то файловую систему в Mongo, где каталоги называются категориями.
Категория JSON выглядит так:
{
"name":"CategoryChildLevel2",
"parentId":"2",
"otherAttribute":"anyVal",
"breadcrumb":[
{
"name":"RootCategory",
"id":"1"
},
{
"name":"CategoryChildLevel1",
"id":"2"
}
]
}
Категории FS связаны друг с другом атрибутом parentId.
Мне нужно отобразить хлебные крошки категорий. Благодаря пользовательской навигации мы можем знать, где мы находимся в FS, но доступ к категориям можно получить непосредственно по их идентификатору (категория с закладками, поисковая система...), без какой-либо навигации FS. Чтобы избежать рекурсивных обращений к БД, чтобы иметь возможность получить хлебные крошки, я ее денормализовал.
Проблема в том, что эту навигационную цепочку сложно поддерживать в актуальном состоянии, потому что категорию верхнего уровня можно перемещать, и, следовательно, все ее дочерние навигационные крошки должны обновляться. Может быть много дочерних категорий для обновления, и есть разные способы решения этой проблемы. Некоторые из них безопасны, но дороги (рекурсия), а другие быстрее, но могут привести к некоторым несоответствиям.
Здесь я хотел бы знать, возможно ли выполнить запрос для извлечения категорий, которые имеют плохую навигационную крошку. Мне нужен запрос, который позволяет сделать:
Получить все категории, которые не имеют: последний элемент массива хлебная крошка.id = parentId
Я не думаю, что часть «последний элемент массива» возможна, но было бы неплохо иметь возможность сделать:
Получить все категории, которые не имеют: Breadcrumb.id содержит parentId
Любое решение, доступное в драйвере Scala или Java? Я использую Salat/Casbah.
Этот вопрос может помочь вам понять, с чем я столкнулся: их">Какую БД вы бы использовали? MongoDB/Neo4j/SQL... все?
categories
, а затем одна изfiles
? К сожалению, в большинстве баз данных деревья — непростая вещь, и обычно требуется рекурсия либо при поиске, либо при обновлении, причем наиболее производительным является тот, который подходит для ваших наиболее часто используемых запросов. - person Sammaye   schedule 02.01.2013find({path: /,06060607/})
для определения того, находится ли этот идентификатор в конце. - person Sammaye   schedule 02.01.2013