2012-12-31 2 views
0

Я пытаюсь сделать что-то похожее наMongoDB группа по столбцам

select column, count(*) 
    from table 
group by column 

в MongoDB.

Я попытался

db.table.group({ 
    key: 'column', 
    initial: {sum:0}, 
    reduce: function(doc, prev) { prev.sum += 1; } } 
}) 

Я хотел бы использовать что-то вроде $ суммы, но она не работает.

Для

db.table.group({ 
    key: 'column' 
}) 

Я получаю

uncaught exception: group command failed: { "errmsg" : "$reduce has to be set", "ok" : 0 } 

мой MongoDB версия 2.0.8 (так что я не могу использовать рамки агрегации).

По результату я не получаю результат для сгруппированных значений столбцов, но результат для

select count(*) from table 

Что я делаю неправильно?

редактировать: (данные добавлены)

> db.table.find() 
{ "_id" : ObjectId("50e180ce9449299428db83e8"), "column" : "a", "cnt" : 1 } 
{ "_id" : ObjectId("50e180d09449299428db83e9"), "column" : "b", "cnt" : 2 } 
{ "_id" : ObjectId("50e180d19449299428db83ea"), "column" : "c", "cnt" : 3 } 
> db.table.group({ key: 'column', initial: { sum: 0}, reduce: function(doc, prev) { prev.sum += 1; } }) 
[ { "sum" : 3 } ] 

Может быть, я использую его в неправильном направлении, но я ожидаю

[ { "a": 1, "b": 1, "c": 1 } ] 
+0

ЗАКАНЧИВАТЬ документы: http://docs.mongodb.org/manual/reference/commands/#group это '$ reduce' не' reduce', что буквально что означает эта ошибка. – Sammaye

+0

MongoDB принимает 'reduce' вместо' $ reduce', и я получаю такой же неправильный результат, когда я использую '$ reduce' :-( – Betlista

+0

Имейте в виду, что' group' не работает, когда включена функция sharding. case, вы можете быть вынуждены использовать структуру агрегации или уменьшить карту. – ghik

ответ

1

The key должен быть объект, а не только имя поля и у вас есть дополнительный трейлинг } на линии reduce.

Попробуйте вместо этого:

db.table.group({ 
    key: {column: 1}, 
    initial: {sum:0}, 
    reduce: function(doc, prev) { prev.sum += 1; } 
}) 
+0

Я добавил пример данных на вопрос, он не работает, как я ожидал ... – Betlista

+0

@Betlista Я обновил ответ, чтобы решить проблему с ' ключ'. – JohnnyHK

+0

да, все, спасибо ;-) – Betlista

Смежные вопросы