Mongoid 4。或不在复杂查询中工作

时间:2014-03-19 16:49:16

标签: ruby-on-rails-4 mongoid4

我知道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]})

这使得编写任何复杂查询变得困难,因此任何指针都会受到赞赏。

1 个答案:

答案 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_uid1的所有产品。这是产品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查询。