Birkaç makale ve örneği inceledim ve bu SQL sorgusunu MongoDB'de yapmanın etkili bir yolunu henüz bulamadım (milyonlarca satırlar belgeler)
İlk girişim
(örneğin bu neredeyse yinelenen sorudan - SQL'deki SELECT DISTINCT'in Mongo eşdeğeri? )
db.myCollection.distinct("myIndexedNonUniqueField").length
Veri kümem çok büyük olduğu için açıkçası bu hatayı aldım
Thu Aug 02 12:55:24 uncaught exception: distinct failed: {
"errmsg" : "exception: distinct too big, 16mb cap",
"code" : 10044,
"ok" : 0
}
İkinci deneme
Bir grup denemeye karar verdim
db.myCollection.group({key: {myIndexedNonUniqueField: 1},
initial: {count: 0},
reduce: function (obj, prev) { prev.count++;} } );
Ama bunun yerine şu hata mesajını aldım:
exception: group() can't handle more than 20000 unique keys
Üçüncü deneme
Henüz denemedim, ancak içeren birkaç öneri var mapReduce
Örneğin
- bu , mongodb'de farklı ve grup nasıl yapılır? (kabul edilmedi, cevap yazarı / OP test etmedi)
- İşlevselliklere göre bu bir MongoDB grubu (İkinci Deneme'ye benzer görünüyor)
- bu http://blog.emmettshear.com/post/2010/02/12/Counting-Uniques-With-MongoDB
- bu https://groups.google.com/forum/?fromgroups#!topic/mongodb-user/trDn3jJjqtE
- bu http://cookbook.mongodb.org/patterns/unique_items_map_reduce/
Ayrıca
Görünüşe göre GitHub'da .distinct, yalnızca bir sayı döndürmesi gerektiğinden bahsetmek için yöntemi düzelten bir çekme isteği var , ancak hala açık: https://github.com/mongodb/mongo/pull/34
Ama bu noktada burada sormaya değer olduğunu düşündüm, konuyla ilgili son gelişmeler neler? Farklı sayılar için SQL veya başka bir NoSQL DB'ye geçmeli miyim? yoksa verimli bir yol var mı?
Güncelleme:
MongoDB resmi dokümanları hakkındaki bu yorum cesaret verici değil, bu doğru mu?
http://www.mongodb.org/display/DOCS/Aggregation#comment-430445808
Güncelleme2:
Görünüşe göre yeni Toplama Çerçevesi yukarıdaki yorumu yanıtlıyor ... (MongoDB 2.1 / 2.2 ve üstü, geliştirme önizlemesi mevcut, üretim için değil)