2011-09-08 30 views
5

Mongoid'de gruplandırmam için bir koşul sağlamak istiyorum, ancak karma koşullarında bir özellik için nasıl birden çok değer gönderebilirim? Bu yapmak istediğim şey: ya page_id Yani dolayısıylaMongoid `group()` koşullar

PageViews.collection.group(
    cond: {page_id: ['4e6912618083ab383e000010', '4e6912618083ab383e000009']}, 
    key: 'timestamp', 
    initial: {count: 0}, 
    reduce: "function(x, y) {y.count += x.count;}" 
) 

herhangi PageView ayrı sorgu olacak, ama ben hiç çalışmak koşulu karma (cond) almak gibi olamaz! Burada ne yapıyorum, gerçekten kafam karıştı. Herhangi bir yardım büyük takdir http://api.mongodb.org/ruby/current/Mongo/Collection.html#group-instance_method

: Burada

group() yöntemi için API dosyaları olduğunu.

PageViews.collection.group(
    cond: {page_id: { $in : ['4e6912618083ab383e000010', '4e6912618083ab383e000009']}}, 
    key: 'timestamp', 
    initial: {count: 0}, 
    reduce: "function(x, y) {y.count += x.count;}" 
) 

aşağıdaki hatayı döndürür, ancak sözdizimi bana iyi göründü:


güncelleme

gibi sorguyu çalıştırma

SyntaxError: (irb):170: syntax error, unexpected ':', expecting tASSOC 
    cond: {page_id: { $in : ['4e6912618083ab383e000010',... 
         ^
(irb):170: syntax error, unexpected '}', expecting $end 
...', '4e6912618083ab383e000009']}}, 
...        ^
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/commands.rb:40:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

O sinir bozucu Bunun herhangi bir örneği yok gibi görünüyor, dokümanlar şunu söylüyor: o durum parametresi şöyle:

(String, BSON::Code) :cond — default: {} — A document specifying a query for filtering the documents over which the aggregation is run (optional).

bir String veya BSON::Code, ya bu şekilde görünecektir alır Yani eğer?

cevap

4

Sorgu için birden çok değere karşılık gelen eşleşmeyi kullanmanız gerekir. Bu yüzden Burada bu konuda daha fazla bilgi bulabilirsiniz

PageViews.collection.group(
    :cond => {:page_id => { '$in' => ['4e6912618083ab383e000010', '4e6912618083ab383e000009']}}, 
    :key => 'timestamp', 
    :initial => {count: 0}, 
    :reduce => "function(x, y) {y.count += x.count;}" 
)  

olarak yazılabilir olacaktır: `(irb): 158: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

+0

Hmm, bana bir yazım hatası vermek görünüyor yazım hatası, beklenmedik '}', $ end ... ',' 4e6912618083ab383e000009 ']}}, ... ' –

+0

bekliyor Açılış dirseğini' page_id:' ve '$ in' arasına koydun mu? – Russell

+0

Yardımlarınız için çok teşekkürler, sorumu olanlarla güncelledim. –