MongoDB kullanıyorum ve yinelenen kayıtları kaldırmalıyım. MlsId "değil" veya "0" ve başka listeleme aynı MlsId varsa (basitleştirilmiş) Bir giriş, yineleniyorMapReduce kullanarak yinelenen kayıtları kaldırma
[
{ "MlsId": "12345"" },
{ "MlsId": "12345" },
{ "MlsId": "23456" },
{ "MlsId": "23456" },
{ "MlsId": "0" },
{ "MlsId": "0" },
{ "MlsId": "" },
{ "MlsId": "" }
]
: Öyle gibi görünen bir liste koleksiyonu var. Yani yukarıdaki örnekte, 2. ve 4. kayıtların kaldırılması gerekecektir.
Tüm yinelenen listeleri nasıl bulabilir ve kaldırabilirim? MapReduce'a bakmaya başladım ama davamıma uyan bir örnek bulamadım. İşte
Ben bugüne kadar ne olduğunu, ancak MlsId "0" veya "" ise o kontrol etmez: Ben mongodb kullanmadıysanız ama mapreduce kullandıkm = function() {
emit(this.MlsId, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.Listing.mapReduce(m,r);
db[res.result].find({value: {$gt: 1}});
db[res.result].drop();
ama sonra m ve r fonksiyonları ve ilan etmeleri halinde mapReduce işlevini yürütün ve sonra db [res.result] .drop(); Komut, tüm girişleri mi yoksa sadece yinelenenleri mi indirecek? MapReduce'u anlayamıyorum ve bu yüzden tüm bunların nasıl çalıştığını bilmiyorum ... – Justin
Küçültmek için küçük bir düzeltme yaptım(). Çapa db.drop() çalıştığından emin değilim ama evet, o belirli Id için tüm entried siler sanırım. Ama umarım harita azaltma kısmındaki anlayışınız açıktır. Ben mongodb sözdizimden emin değilim .. bir şey anlayabiliyor mu göreceksiniz .. –
Burada belirtildiği gibi çiftleri kaldır seçeneği ile bir dizin eklemeyi deneyebilirsiniz: http://www.mongodb.org/display/DOCS/ Dizinler Otomatik olarak yinelenen değerleri bırakır.Diğer bir yol, önce tüm değerleri() bırakıp bir değer eklemektir. –