Как исключить поля из внедренного документа в Mongoid? - PullRequest
10 голосов
/ 21 июня 2011

У меня есть почтовый документ со встроенными тегами. Иногда я отображаю только заголовок поста и его теги. В этих случаях я использую следующий запрос в mongoid:

Post.only(:title).find(id)

Затем я отправляю результаты запроса как json клиенту. К сожалению, идентификатор тега bson делает json намного больше, чем мне нужно. Как исключить поле "_id" из запроса?

Вот мои модели:

class Post
  include Mongoid::Document
  field :title, :type =>  String
  field :body, :type =>  String
  field :tags, :type =>  Array
  embeds_many :tags
end
class Tag
  include Mongoid::Document  
  field :tag, :type =>  String
  field :type, :type =>  String
  embedded_in :post
end

1 Ответ

14 голосов
/ 21 июня 2011

Вам нужно будет использовать метод Mongoid without. Нечто подобное должно сработать:

Post.without(:_id, :body, "tags._id")

, который будет возвращать только все заголовки ваших сообщений, а также все их встроенные теги, а не поля _id для сообщений или тегов.

Я также заметил, что в вашей модели Post определено field :tags, :type => Array, что, я считаю, является избыточным. Использование embeds_many автоматически устанавливает это поле для вас.

...