0

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

它有点难以编写任何复杂的查询,因此任何指针都会受到赞赏。

4

1 回答 1

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

在第一个查询中,您得到的是OR等于所有产品。即产品 1、2 和 3。sender_uid receiver_uid1

在第二个查询中,您查询的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方法接收条件的哈希值。每一个都像一个where查询。

于 2014-03-27T15:27:51.427 回答