Разница с результатом подсчета в группе Монго по запросу с Ruby / Javascript - PullRequest
0 голосов
/ 09 сентября 2011

Я использую 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}
]

Не понимаю ли ячто происходит за кулисами?Нужно ли (могу ли я?) Приводить эти числа или результат javascript просто показывает его без .0?

1 Ответ

2 голосов
/ 09 сентября 2011

JavaScript не различает плавающие и целые числа. Он имеет один тип Number, который реализован как double. Таким образом, то, что вы видите в Ruby, является правильным, вывод оболочки mongo следует соглашениям печати javascript и отображает числа, у которых нет десятичного компонента без '.0'

...