2011-04-05 15 views
19

: Ben üzerinden gitmek için basit JavaScript döngü ekledikBir MongoDB GROUP BY içinde HAVING yapmak için doğru yolu nedir? (Çiftleri bulmak için) SQL bu sorgu ne olacağını İçin

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

:

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

Ben MongoDB bu basit sorgu gerçekleştirilen sonuç ayarlanır ve tüm bir sayım var> 1 ile alanları, şöyle bulmak için bir filtre uygulandı:
for (i in res) {if (res[i].count>1) printjson(res[i])}; 

javascript kodu ı kullanmaktan daha bu diğer yapmak için daha iyi bir yolu var mı müşteri mi? Bu en iyi/en basit yolu ise , bu olduğunu söylemek ve bu soru yardımcı olacak birileri :)

+1

benzer soruyu kontrol edin http://stackoverflow.com/questions/4224773/fast-way-to-find-duplicates-on-indexed-column-in-mongodb – RameshVel

+0

Benzer, ama aynı değil. MongoDB'nin harita azaltma işlevini değil, bir grup işlevi kullanıyorum. – shlomoid

+0

Ama bu cevaptan bağlanan bu site basit bir örnekle yardımcı oluyor: http://csanz.posterous.com/look-for-duplicates-using-mongodb-mapreduce – shlomoid

cevap

42
bu soru 10gen mongodb sürüm 2.2 yayınlandı, sorular ve yanıtlar sonra Mongo toplama çerçevesini

kullanılarak

Yeni cevap bir toplama çerçevesiyle. Bu sorguyu yapmak için yeni en iyi yoludur:

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 kullanışlı SQL to Mongo Aggregation conversion chart değerinde imleme sahiptir.