Mongoid Query Синтаксис Вопрос - PullRequest
0 голосов
/ 22 августа 2011

Мне нужно получить набор ответов в соответствии с 2 атрибутами.

Вот что я хочу сделать:

# where liker_ids is an array and user_id is a bson in the answer document
feed_answers=Answer.any_in(:liker_ids=>to_use,:user_id.in=>to_use).desc()map{|a|a}

Что я в итоге сделал:

# to use 
to_use=[some array of ids]
friend_answers=Answer.any_in(:liker_ids=>to_use).map{|a|a}
liked_answers=Answer.where(:user_id.in=>to_use).map{|a|a}

feed_answers=(friend_answers+ liked_answers).sort{|x,y| y.created_at<=>x.created_at}

Проблема в том, что я не знаю, как объединить 2 запроса в один. Я пробовал разные комбинации, но ничего не получается. и мой взломанный метод, конечно, крайне неэффективен.

1 Ответ

1 голос
/ 22 августа 2011

Вы должны сделать (отсутствует параметр для desc):

Answer.any_in(:liker_ids=>to_use, :user_id.in=>to_use).desc(:created_at)

Но any_in здесь не используется правильно, он ведет себя подобно where в этой ситуации.Вы, вероятно, хотите or:

Answer.or(:liker_ids=>to_use).or(:user_id.in=>to_use).desc(:created_at)
# or
Answer.any_of({:liker_ids=>to_use}, {:user_id.in=>to_use}).desc(:created_at)
# or
Answer.or({:liker_ids=>to_use}, {:user_id.in=>to_use}).desc(:created_at)

Вам не нужно, чтобы map в конце цепочки критериев, критерии mongoid загружаются лениво, когда они сталкиваются с методом, на который критерии не отвечают.Они также могут использовать курсоры mongodb, поэтому рекомендуется не использовать карту, если в этом нет необходимости.Вам следует использовать Criteia#only или Criteria#without, если вы хотите получить подмножество полей из mongodb.

...