ventajas que español desventajas caracteristicas group-by mongodb having having-clause

group by - que - ¿Cuál es la forma correcta de hacer HECHO en un GRUPO MongoDB?



mongodb español (1)

Para lo que sería esta consulta en SQL (para encontrar duplicados):

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

Realicé esta simple consulta en MongoDB:

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

He agregado un simple bucle de Javascript para revisar el conjunto de resultados, y he realizado un filtro para encontrar todos los campos con un conteo> 1 allí, así:

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

¿Hay una forma mejor de hacerlo que no sea usar código javascript en el cliente? Si esta es la forma mejor / más sencilla, diga que lo es, y esta pregunta ayudará a alguien :)


Nueva respuesta usando el marco de agregación de Mongo

Después de que se hizo y se respondió esta pregunta, 10gen lanzó la versión 2.2 de Mongodb con un marco de agregación. La nueva mejor manera de hacer esta consulta es:

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 tiene un útil cuadro de conversión de agregación de SQL a Mongo que vale la pena marcar.