2011-09-09 7 views
0

Mongoデータベースの特定の種類のレコードの数を取得するためにMongoidを使用しています。 JavaScriptのメソッドを使用してクエリ実行している場合:Ruby/JavascriptによるクエリによるMongoグループのカウント結果の差

db.tags.group({ 
    cond : { tag: {$ne:'donotwant'} }, 
    key: { tag: true }, 
    reduce: function(doc, out) { out.count += 1; }, 
    initial: { count: 0 } 
}); 

を私は次のような結果を得る:

[ 
{"tag" : "thing", "count" : 4}, 
{"tag" : "something", "count" : 1}, 
{"tag" : "test", "count" : 1} 
] 

が、私はそれが何をしたいのかを正確に行います。私は、同じクエリを実行するには、対応するMongoidコードを利用する場合しかし、:

Tag.collection.group(
    :cond => {:tag => {:$ne => 'donotwant'}}, 
    :key  => [:tag], 
    :reduce => "function(doc, out) { out.count += 1 }", 
    :initial => { :count => 0 }, 
) 

カウントパラメータは(一見)の代わりに整数の浮動小数点数として選択されています

[ 
{"tag"=>"thing", "count"=>4.0}, 
{"tag"=>"something", "count"=>1.0}, 
{"tag"=>"test", "count"=>1.0} 
] 

私は背後に何が起こっている誤解アムシーン?私はそれらのカウントをキャストする必要がありますか?または.0なしで表示しているJavaScriptの結果ですか?

答えて

2

JavaScriptは浮動小数点数と整数を区別しません。これは、倍精度として実装される1つのNumber型を持ちます。 Rubyで表示されている内容は正しいですが、mongoシェルの出力はJavaScriptの印刷規則に従い、 '.0'のない小数成分を持たないNumbersを表示します