Mongoid / Mongodb 和查询嵌入文档

Posted

技术标签:

【中文标题】Mongoid / Mongodb 和查询嵌入文档【英文标题】:Mongoid / Mongodb and querying embedded documents 【发布时间】:2011-04-26 15:41:00 【问题描述】:

我有 AuthorBook 模型。

一个Author 有许多嵌入的Books

我可以查询嵌入的Books,还是必须先获取Authors才能得到Books

【问题讨论】:

【参考方案1】:

您可以查询嵌入的文档,只需限定名称即可。现在,这将返回所有拥有与您的查询匹配的书籍的作者。

如果作者被定义为有很多 :books(并且 book 是一个嵌入的::document)

@authors_with_sewid = Author.where("books.name" => "sewid").all

然后您需要遍历作者并提取书籍。

【讨论】:

好的,非常感谢。如果我有嵌入和参考文档的混合,我是否也可以查询参考文档?例如,作者模型有一个创建者字段,其中包含用户的 ID。是否可以做'Author.where("book.name" = "sewid").and("creator.username" => "example")'?第一次尝试失败。 一旦它们被引用对象,您将需要一个联接。并且在 mongodb 的土地上没有加入。 在这种情况下,最好的办法是对您的数据进行非规范化并将创建者用户名与作者一起存储。 只是一个快速通知。应该是 ("books.name" => "sewid"),因为作者有很多嵌入的书籍。 请注意,仍然可以进行更复杂的查询,例如:all_of(:'books.name' => 'name', :'books.author' => /joe/i)

以上是关于Mongoid / Mongodb 和查询嵌入文档的主要内容,如果未能解决你的问题,请参考以下文章

所有嵌入文档都符合条件的 Mongoid 查询记录

rails查询mongodb通用查询

MongoDB对HABTM关系(Mongoid,RoR)的条件聚合查询?

查询 Mongoid/rails 3 中的嵌入对象(“低于”、Min 运算符和排序)

Mongoid:嵌入文档在父级构造时自动初始化

如何使用 Mongoid 查看原始 mongoDB 查询