使用Ruby / Javascript查询Mongo组中的计数差异

时间:2011-09-09 00:25:36

标签: ruby mongodb mongoid

我正在使用Mongoid来计算Mongo数据库中某些类型的记录。使用javascript方法运行查询时:

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结果?

1 个答案:

答案 0 :(得分:2)

JavaScript不区分浮点数和整数。它有一个Number类型,实现为double。所以你在Ruby中看到的是正确的,mongo shell输出遵循javascript打印约定并显示没有'.0'的小数组件的数字