2011-11-28 2 views
4

mongodb/mongomapper를 처음 사용하여 이에 대한 답변을 찾을 수 없습니다.mongomapper를 사용하여 Array 필드에 요소를 포함한 문서를 찾으십니까?

내가

key :author_id, Integer 
key :partecipant_ids, Array 

것은 이제 나는 다음과 같은 속성을 가진 "레코드"있다고 가정 해 봅시다 다음 필드가있는 mongomapper 클래스가 : 나는 모든 개체를 검색 할

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

을 어디 partecipant id 15가 관련되어 있습니다. 설명서에 언급 된 내용이 없습니다.

이상한 것은 이전에 나는 일이 쿼리

MessageThread.where :partecipant_ids => [15] 

을 수행했지만, 보석/MongoDB의 버전 (아마도) 일부 변경 후 작동이 중지한다는 것입니다. 불행히도 mongodb 및 mongomapper의 버전을 이전에 사용하고 있는지 알 수 없습니다. MongoMapper의 현재 버전의

+0

어떤 버전의 레일/몽고 마퍼/몽고 등을 지금 사용하십니까? –

+0

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

답변

7

이 작동합니다 ... ...

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 테스트를 보면 소스보다 읽기가 쉽습니다 (https://github.com/jnunemaker/plucky/blob/). master/test/plucky/test_criteria_hash.rb # L144 –

+0

이상한 사실. MessageThread.where (: partecipant_ids => [ '15'])와 함께 작동합니다. 어떤 이유로 문자열의 배열처럼 취급됩니까? 100 % 확신하기 때문에 업그레이드하기 전에 정수로 작업하고있었습니다. –

+0

여러분은 : partecipant_ids 키에 typecast => 'Integer'를 추가 할 수 있습니다. 그게 많은 것을 깨뜨릴 지 확신하지 못합니다. –

관련 문제