查询mongoid中的特定字段

时间:2011-11-25 19:41:27

标签: mongodb mongoid

我可以通过查询MongoId得到具体的字段值,结构如下:

{
    _id: ObjectId(xxx),
    name: xxx,
    subs: [{
        _id: ObjectId(yyy),
        name: yyy,
        subs: [{
            _id: ObjectId(zzz),
            name: zzz,
            subs: [...]
        }]
    }]
}

我需要这个,给定一个特定的ObjectId获取一个包含字段的元素:_id,name

注意:包含所有信息的单个文档。

问候

2 个答案:

答案 0 :(得分:1)

对于您当前的数据模型,您似乎需要检索顶级文档,然后以递归方式在您检索的文档中搜索所需的对象。

有多种方法可以存储分层数据,我建议您查看10gen文档here,它们非常详尽,但我会在下面总结一下。

让我们看一下该文档中提出的一些想法,从当前方法的优点和缺点开始。

单个文档中的完整树(您现在正在做什么)

  • 优点:
    • 每页提取的单个文档
    • 整个树的磁盘上的一个位置
    • 您可以轻松查看完整结构
  • 缺点
    • 难以搜索
    • 很难找回部分结果
    • 如果你需要一棵大树,可能会变得笨重。此外,MongoDB中的文档大小有限制 - 在1.8版本中为16MB(未来版本的限制可能会增加)。

您的问题直接与搜索问题有关,根据您的使用案例和优化愿望,您可能要么采用祖先数组物化路径

祖先数组

使用这种方法,您可以将文档的祖先存储在数组中,并在该字段上创建索引,以便快速,轻松地搜索。

物化路径

使用这种方法,您可以将文档的完整路径存储为一串祖先,并通过正则表达式进行查询。

有意义吗?

答案 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