Mongoid查询语法问题

时间:2011-08-22 01:41:40

标签: mongodb mongoid

我需要根据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 个答案:

答案 0 :(得分:1)

你应该这样做(缺少参数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游标,因此建议不要在没有必要的情况下使用map。如果要从mongodb检索字段子集,则应使用Criteia#onlyCriteria#without

相关问题