2011-11-28 65 views
4

我是mongodb/mongomapper的新手,無法找到答案。使用mongomapper查找包含Array字段元素的文檔?

我有以下字段的mongomapper類

key :author_id, Integer 
key :partecipant_ids, Array 

比方說,我有一個具有以下屬性的「戰績」:

{ :author_id => 10, :partecipant_ids => [10,15,201] } 

我想要檢索的所有對象,其中partecipant與id 15有關。 我沒有在文檔中找到任何提及。

奇怪的是,以前我在做這個查詢

MessageThread.where :partecipant_ids => [15] 

其工作,但之後(也許)在創業板/ MongoDB的版本,一些變化也停止工作。 不幸的是,我不知道我以前使用的是哪個版本的mongodb和mongomapper。

+0

現在使用的是什麼版本的rails/mongomapper/mongodb等? –

+0

rails 3.0.10,mongo(1.5.0),mongo_mapper(0.10.1) –

回答

7

在MongoMapper的當前版本,這將工作:

MessageThread.where(:partecipant_ids => 15) 

這應該工作,以及...

MessageThread.where(:partecipant_ids => [15]) 

...因爲勇敢autoexpands,爲:

MessageThread.where(:partecipant_ids => { :$in => [15] }) 

(見https://github.com/jnunemaker/plucky/blob/master/lib/plucky/criteria_hash.rb#L121

我想說看看你的數據,並嘗試在Mongo控制檯查詢,以確保你有一個工作查詢。 MongoDB查詢直接轉換爲MM查詢,除了上述(以及其他一些小問題)警告。請參閱http://www.mongodb.org/display/DOCS/Querying

+0

另見plucky測試,它們可能比source更清晰:https://github.com/jnunemaker/plucky/blob/ master/test/plucky/test_criteria_hash.rb#L144 –

+0

奇怪的事實。使用MessageThread.where(:partecipant_ids => ['15'])它可以工作。由於某種原因,它現在被當作一串字符串對待?我100%確定在升級之前它使用整數。 –

+0

您可以嘗試將:typecast =>'Integer'添加到您的:partecipant_ids項。我不確定這是否會打破許多協會。 –

相關問題