MongoDB có thể lưu trữ các tài liệu phụ:
Node
{
"value" : "root"
"children" : [ { "value" : "child1", "children" : [ ... ] },
{ "value" : "child2", "children" : [ ... ] } ]
}
Tuy nhiên, tôi không khuyên bạn nên sử dụng subdocuments cho cấu trúc cây hoặc bất cứ thứ gì khá phức tạp. Subdocuments không phải là công dân cấp một; chúng không phải là vật phẩm sưu tập. Ví dụ:
Ví dụ: giả sử bạn muốn có thể nhanh chóng tìm thấy các nút có giá trị nhất định. Thông qua chỉ mục trên value
, tra cứu đó sẽ nhanh chóng. Tuy nhiên, nếu giá trị nằm trong một subdocument, nó sẽ không được lập chỉ mục bởi vì nó không phải là giá trị của một phần tử sưu tập.
Do đó, nó thường là tốt hơn để thực hiện tuần tự bằng tay và lưu trữ một danh sách các id thay vì:
Node
{
"_id" : ObjectId("..."),
"parentId" : ObjectId("..."), // or null, for root
}
Bạn sẽ phải làm một số tuần tự bằng tay để lấy id yếu tố tương ứng của.
Gợi ý Giả sử bạn muốn tìm nạp toàn bộ nhánh cây. Thay vì lưu trữ chỉ id cha mẹ trực tiếp, bạn có thể lưu trữ tất cả tổ tiên Id thay vì:
"ancestorIds": [id1, id2, id3]