2014-03-19 19 views
0

我知道Mongoid 4仍處於測試階段,也許我發現了一個錯誤,但我很難理解爲什麼第一個查詢可以工作,而第二個查詢不會返回任何結果: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

請看下面的例子:

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_uidreceiver_uid等於1 ALL產品。即產品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]) 

UPDATE:

接聽的評論:

Product.or({ product_id: 1 }, { product_id: 2, sender_uid: 2 }) 

正如你所看到的,or方法接收到哈希的條件。每個人都像一個where查詢。

+0

這很有道理。我想我誤解了.or和.and方法的作用(即添加一個全新的標準,而不是修改現有的標準)。如果是這樣,那麼將如何實現更復雜的查詢,如下所示:product_id = 1 OR(product_id = 2 AND sender_uid = 2)? – Graham

+0

在答案中查看我的更新。 – cortex