Как неумолимый mongodb "включает в себя" условие поиска - PullRequest
0 голосов
/ 27 августа 2010

Я использую Mongoid и у меня есть проект и пользовательская модель.в модели проекта у меня есть поле

class Project
  include Mongoid::Document
  field :name
  field :user_ids, :type => Array
end

class User
  include Mongoid::Document
  field :email
end

Я могу найти всех пользователей, принадлежащих одному проекту, т. е. «найти пользователей этого проекта»

@project  = Project.first # => 'Housework'
User.criteria.id(@project.user_ids) # => ['Bart','Lisa','Maggie']

Но у меняНемного проблем с поиском всех проектов, принадлежащих одному пользователю, т. е. «найти проекты этого пользователя»

@user = User.first   # => 'Bart'
Project.where(:user_ids => @user.id) # doesn't work
Project.where(:user_ids.includes => @user.id) # not such method
Project.where(:user_ids => [@user.id]) # doesn't make sense to compare arrays, but tried anyway and doesn't work

Я знаю, что у вас может быть другое поле в модели User для хранения project_ids, я бы с удовольствием это сделал, но мне просто любопытно, есть ли метод, который будет использоваться в условиях поиска, который работает аналогично #include?в рубине?

1 Ответ

0 голосов
/ 28 августа 2010

Я нашел решение для этого. это метод поиска all_in

пример:

Fruit.all[0].colors = ['red','green','blue'] #=> apple
Fruit.all[1].colors = ['yellow','green']     #=> banana

Fruit.all[2].colors = ['red', 'yellow']      #=> pineapple

Чтобы найти все фрукты, которые имеют красный цвет в поле массива 'colors', можно запросить:

Fruit.all_in(:colors => ['red'])

=> [яблоко, ананас]

...