我可以通过查询MongoId得到具体的字段值,结构如下:
{
_id: ObjectId(xxx),
name: xxx,
subs: [{
_id: ObjectId(yyy),
name: yyy,
subs: [{
_id: ObjectId(zzz),
name: zzz,
subs: [...]
}]
}]
}
我需要这个,给定一个特定的ObjectId获取一个包含字段的元素:_id,name
注意:包含所有信息的单个文档。
问候
答案 0 :(得分:1)
对于您当前的数据模型,您似乎需要检索顶级文档,然后以递归方式在您检索的文档中搜索所需的对象。
有多种方法可以存储分层数据,我建议您查看10gen文档here,它们非常详尽,但我会在下面总结一下。
让我们看一下该文档中提出的一些想法,从当前方法的优点和缺点开始。
单个文档中的完整树(您现在正在做什么)
您的问题直接与搜索问题有关,根据您的使用案例和优化愿望,您可能要么采用祖先数组或物化路径相反,强烈的方法。
祖先数组
使用这种方法,您可以将文档的祖先存储在数组中,并在该字段上创建索引,以便快速,轻松地搜索。
物化路径
使用这种方法,您可以将文档的完整路径存储为一串祖先,并通过正则表达式进行查询。
有意义吗?
答案 1 :(得分:1)
如果要在mongoid中构建树结构。我建议调查一下 Mongoid Tree
它是一个很好的宝石,可以为你提供所需或最少的东西。
来自自述:
class Node
include Mongoid::Document
include Mongoid::Tree
end
Node.root
Node.roots
Node.leaves
node.root
node.parent
node.children
node.ancestors
node.ancestors_and_self
node.descendants
node.descendants_and_self
node.siblings
node.siblings_and_self
node.leaves