我知道Mongoid 4仍然处于测试阶段,也许我发现了一个错误,但我很难理解为什么第一个查询有效,第二个查询没有返回:
Product.or({sender_uid: params[:user_id]}, {receiver_uid: params[:user_id]})
Product.where({sender_uid: params[:user_id]}).or({receiver_uid: params[:user_id]})
这使得编写任何复杂查询变得困难,因此任何指针都会受到赞赏。
答案 0 :(得分:0)
请参阅以下示例:
Product 1: sender_uid = 1, receiver_uid = 2
Product 2: sender_uid = 2, receiver_uid = 1
Product 3: sender_uid = 1, receiver_uid = 2
params[:user_id] = 1
在第一个查询中,您获得的是全部 sender_uid
OR receiver_uid
等于1
的产品}。这是产品1,2和3。
在第二个查询中,您要查询sender_uid
为1
的所有产品。这是产品1和产品3然后(根据该标准),receiver_id
= 1的产品。产品1,而不是产品2都没有带有uid 1的接收器。所以,这就是为什么你得到的原因没有。你在第二个查询中所做的是:
Product.where(sender_uid: params[:user_id]).where(receiver_uid: params[:user_id])
<强>更新强>
回答评论:
Product.or({ product_id: 1 }, { product_id: 2, sender_uid: 2 })
如您所见,or
方法接收到Hashes条件。每个都像where
查询。