조상 배열이 있는 모델 트리 구조
개요
이 페이지에서는 상위 노드에 대한 참조와 모든 앤세스터를 저장하는 배열을 사용하여 MongoDB 문서에서 트리와 같은 구조를 설명하는 데이터 모델에 대해 설명합니다.
패턴
앤세스터의 배열 패턴은 문서에 각 트리 노드를 저장합니다. 문서는 트리 노드 외에도 노드의 앤세스터 또는 경로의 ID를 배열에 저장합니다.
다음과 같은 카테고리 계층 구조를 고려하세요:
다음 예시는 앤세스터 배열을 사용하여 트리를 모델링합니다. ancestors
필드 외에도 이러한 문서는 parent
필드의 직계 상위 카테고리에 대한 참조도 저장합니다.
db.categories.insertMany( [ { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" }, { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" }, { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" }, { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" }, { _id: "Programming", ancestors: [ "Books" ], parent: "Books" }, { _id: "Books", ancestors: [ ], parent: null } ] )
노드의 앤세스터 또는 경로를 검색하는 쿼리는 빠르고 간단합니다:
db.categories.findOne( { _id: "MongoDB" } ).ancestors 앤세스터 노드에서 빠르게 검색하도록
ancestors
필드에 인덱스를 생성할 수 있습니다.db.categories.createIndex( { ancestors: 1 } ) ancestors
필드로 쿼리하여 모든 하위 항목을 찾을 수 있습니다:db.categories.find( { ancestors: "Programming" } )
앤세스터의 배열 패턴은 앤세스터 필드의 요소에 인덱스를 생성하여 노드의 디센던트와 앤세스터를 찾는 빠르고 효율적인 솔루션을 제공합니다. 따라서 앤세스터의 배열은 하위 트리 작업에 적합한 선택입니다.
앤세스터의 배열 패턴은 구체화된 경로 패턴보다 약간 느리지만 사용하기가 더 쉽습니다.