Ita*_*vka 11 tree store mongodb mongo-collection
我需要存储一个递归树结构.链表.
所以所有的对象都是一样的.每个都有一个指向父对象的指针,每个对象都有一个子对象数组.
我可以在Mongo中存储这样的结构吗?
即Mongo父对象集合,每个对象在其中包含Mongo子对象集合.
$a = $MyCollection->findOne(**some conditions)->Childs->find(...)
Run Code Online (Sandbox Code Playgroud)
MongoDB可以存储子文档:
Node
{
"value" : "root"
"children" : [ { "value" : "child1", "children" : [ ... ] },
{ "value" : "child2", "children" : [ ... ] } ]
}
Run Code Online (Sandbox Code Playgroud)
但是,我不建议将子文档用于树结构或任何相当复杂的东西.分目录不是一级公民; 它们不是收藏品.
例如,假设您希望能够快速找到具有给定值的节点.通过索引value,查找会很快.但是,如果值在子文档中,则不会对其编制索引,因为它不是集合元素的值.
因此,通常最好手动进行序列化并存储一个id列表:
Node
{
"_id" : ObjectId("..."),
"parentId" : ObjectId("..."), // or null, for root
}
Run Code Online (Sandbox Code Playgroud)
您必须手动执行一些序列化以获取相应元素的ID.
提示 假设您要获取树的整个分支.您可以存储所有祖先ID,而不是仅存储直接父ID :
"ancestorIds": [id1, id2, id3]
您无法将集合存储在集合中.但是您可以存储引用其他集合中的对象的ID.您必须将id解析为文档或元素,然后如果该元素存储更多ID,则需要解决这些问题.文档意味着丰富和重复的数据,但在文档中他们解释说,而不是嵌入你可以只使用ID
| 归档时间: |
|
| 查看次数: |
13237 次 |
| 最近记录: |