2011-11-28 81 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项。我不确定这是否会打破许多协会。 –

相关问题