查询嵌套对象的筛选字段

时间:2011-11-08 23:38:42

标签: ruby-on-rails mongodb mongoid mongomapper

我想说我有一份文件

book: {name: "book", 
   "chapters":[{title: "Chapter I", 
   "sections":[{},{}]
   }, {...}
]}

我想用嵌入式对象章节获取book对象,但每章不应包含嵌套的“sections”(但应包含其他属性,如title):

book: {name: "Book", 
   "chapters":[{title: "Chapter I"
   }, {...}
]}

如何使用 Mongo驱动程序 Mongoid (或 Mongomapper )进行查询?

我用mongoid试了一下:

books.all[0].chapters.only(:title)[0].sections # it still works, though I expect sections to be nil

1 个答案:

答案 0 :(得分:1)

您的查询

 books.all[0].chapters.only(:title)[0].sections 

在books.all上挑选所有章节嵌入文档的书籍,因此在章节之后使用“仅”是没有意义的。如果章节作为单独的文档并且得到has_many关系而不是embeds_many

,那么您的查询可以工作

所以你必须在书籍文件

上使用'only'
 books.only('chapters.title').all[0].chapters.sections