2012-03-19 223 views
1

我需要實現以下查詢 - 標籤是我文檔中的一個內部數組,我需要查詢 標籤包含'a'和'b'以及('c'或'd' )MongoMapper複雜查詢

我可以用mongomapper嗎?

回答

1

基本上你需要做這樣的查詢:基於mpobrien的回答

Test.where({ 
    "$and" => [ 
    :tags => 'a', 
    :tags => 'b', 
    "$or" => [:tags => 'c', :tags => 'd'] 
    ] 
}) 
0

...但正確的語法:

db.test.find({$and:[{tags:'a'},{tags:'b'}, {$or:[{tags:'c'}, {tags:'d'}] }]}) 

隨着mongomapper,試試這個:

Test.where(
    :tags.all => ['a', 'b'], 
    :$and => [{:tags.in => ['c', 'd']}] 
) 

或者更直接地Mongolike ...

Test.where(
    :tags => { 
    :$all => ['a', 'b'], 
    :$in => ['b', 'c'] 
    } 
) 
+1

你可能不能''tags.all => [...],:tags.in => [...]'因爲[plucky](https:// github .com/jnunemaker/plucky/blob/master/lib/plucky/criteria_hash.rb)解決了查詢,因此增加了':$和'子句。 – 2012-03-19 20:01:11