У меня есть следующие n (n с mongoid gem) с двумя коллекциями книг и издателей:
{
name: "O'Reilly Media",
founded: 1980,
location: "CA",
books: [123456789, 234567890, ...]
}
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English"
}
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English"
}
Мне нужно вернуть в один запрос издателей, но разделенных в документах, как это:
{
name: "O'Reilly Media",
founded: 1980,
location: "CA",
book: 123456789 # or books:[123456789]
}
{
name: "O'Reilly Media",
founded: 1980,
location: "CA",
book: 234567890 # or books:[123456789
}
Я хочу, чтобы это было внутри mongo в запросе, на самом деле я делаю это в файле rabl, модифицируя коллекцию, но это не очень хорошо для получения и использования в других представлениях, поэтому я хочу сделать это преобразование в Mongo, а не в ruby, или, может быть, я должен изменить запрос к книгам вместо издателей.
Это код в ruby:
@publishers is a mongoid::Criteria
@publishers = @publishers.collect do |s|
s.books.count > 1 ? s.publisher_separate_by_books : s
end.flatten
class Publisher
has_and_belongs_to_many :books, inverse_of: :books, dependent: :nullify
def publisher_separate_by_books
books.map {|i| Publisher.new({name: name, founded: founded, location: location, books: [i]})}
end
end
Как этого добиться в монго-запросе