У меня есть данные в базе данных базы данных Mongo, где каждый документ имеет идентификатор родителя. Если я хочу искать все документы, у которых есть конкретный документ (я буду называть его как P) в его родословной (т.е. P - это его родитель, дедушка, прабабушка и т. Д.), Каковы мои варианты, чтобы сделать это эффективно, и каковы эти возможности сильные и слабые стороны?Как я могу найти подмножество дерева эффективно в монго?
я могу думать о следующем:
- магазина всей родословной в каждом документе, так что вы можете осуществлять поиск документов, которые родословная списка содержит P.
- Сильных стороны:
- постоянного время посмотреть до
- Слабости:
- Если родительский объект изменен, соответствующее обновление - O (n), где n - число потомков документа, родитель которого изменен.
- Некоторые издержки на хранение, O (a), где a - средняя глубина документа
- Сильных стороны:
- при поиске, первым построить список идентификаторов дочерних документов P, затем внучатые документов и т.д. Затем найти все документы с этими идентификаторами
- Сильные стороны:
- Никаких изменений не требуется к хранилищу электронная структура, нет дополнительного пространства над головой
- Недостатки:
- Построение списка идентификаторов представляет собой операцию О (п), где п числа документов потомка P
- Поиска по, возможно, сотням из идентификаторов не может быть эффективным
- Сильные стороны:
Кто-нибудь знает другие методы?
Вы изучали - http://docs.mongodb.org/manual/applications/data-models-tree-structures/? – BatScream
У меня нет, но это очень актуальная ссылка. Похоже, что «массив предков» и «материализованные пути» - это, по сути, одно и то же, и оба являются моим первым вариантом. Вложенные наборы не подходят для меня, а два других - это то, что я уже делаю –