Подтвердить что ты не робот

Каков правильный способ сделать HAVING в группе MongoDB GROUP BY?

Для чего будет этот запрос в SQL (чтобы найти дубликаты):

SELECT userId, name FROM col GROUP BY userId, name HAVING COUNT(*)>1

Я выполнил этот простой запрос в MongoDB:

res = db.col.group({key:{userId:true,name:true}, 
                     reduce: function(obj,prev) {prev.count++;}, 
                     initial: {count:0}})

Я добавил простой цикл Javascript, чтобы перейти к набору результатов, и выполнил фильтр, чтобы найти все поля с числом count > 1, например:

for (i in res) {if (res[i].count>1) printjson(res[i])};

Есть ли лучший способ сделать это, кроме использования javascript-кода в клиенте? Если это лучший/самый простой способ, скажите, что это так, и этот вопрос поможет кому-то:)

4b9b3361

Ответ 1

Новый ответ с использованием инфраструктуры агрегации Mongo

После того, как этот вопрос был задан и ответил, 10gen выпустил версию Mongodb версии 2.2 с базой агрегации. Новый лучший способ сделать этот запрос:

db.col.aggregate( [
   { $group: { _id: { userId: "$userId", name: "$name" },
               count: { $sum: 1 } } },
   { $match: { count: { $gt: 1 } } },
   { $project: { _id: 0, 
                 userId: "$_id.userId", 
                 name: "$_id.name", 
                 count: 1}}
] )

10gen имеет удобную таблицу SQL to Mongo Aggregation, которая стоит закладок.