如何檢索Mongoid
中IDs
的數組?檢索Mongoid中的ID數組
arr=["id1","id2"]
User.where(:id=>arr)
你可以,如果你正在檢索另一屬性
User.where(:nickname.in=>["kk","ll"])
但我想知道如何在mongoid做到這一點很容易做到這一點 - >這應該是一個非常簡單和常見的操作
如何檢索Mongoid
中IDs
的數組?檢索Mongoid中的ID數組
arr=["id1","id2"]
User.where(:id=>arr)
你可以,如果你正在檢索另一屬性
User.where(:nickname.in=>["kk","ll"])
但我想知道如何在mongoid做到這一點很容易做到這一點 - >這應該是一個非常簡單和常見的操作
請記住,ID存儲爲:_id
而不是:id
。有一個id
的輔助方法,但是當你做查詢,你應該使用:_id
:
User.where(:_id.in => arr)
我常常覺得有用讓IDS做複雜查詢的列表,所以我這樣做:
user_ids = User.only(:_id).where(:foo => :bar).map(&:_id)
Post.where(:user_id.in => user_ids)
上面的方法建議browsersenior似乎沒有工作了,至少對我來說。我要做的就是:
User.criteria.id(arr)
或者乾脆:以上
arr = ['id1', 'id2', 'id3']
User.find(arr)
user_ids = User.only(:_id).where(:foo => :bar).map(&:_id)
Post.where(:user_id.in => user_ids)
解決方案的工作正常,當用戶量小。但有數千用戶需要大量內存。
User.only(:_id).where(:foo => :bar).map(&:_id)
將創建一個用戶對象列表,其中每個字段中的nil除id外。
(對於mongoid 2.5)將溶液:
User.collection.master.where(:foo => :bar).to_a.map {|o| o['_id']}
當用戶的量小的溶液上方工作正常。但有數千用戶需要大量內存。 – dpaluy 2012-10-15 20:30:52
@dpaluy你是對的 - 這種方法只是一個破解。此外,數據可能會在第一次和第二次查詢之間發生變化,特別是在有大量文檔的情況下。謹慎使用,或者更好,找出更好的方法! – bowsersenior 2012-10-16 19:28:10
更好的方法是使用`.distinct(:_ id)`而不是`.map(&:_ id)`。 `distinct`在執行查詢時起作用,這比告訴導軌循環數組要快得多。 – Zakwan 2014-05-23 17:06:01