Kami memiliki masalah yang berkaitan dengan data duplikat dalam database kami, dengan bidang tanggal memiliki beberapa nilai di mana kami seharusnya memiliki 1. Saya pikir saya akan menambahkan cara kami menyelesaikan masalah untuk referensi.
Kami memiliki koleksi yang disebut "data" dengan bidang "nilai" numerik dan bidang "tanggal". Kami memiliki proses yang kami pikir idempoten, tetapi akhirnya menambahkan 2 x nilai per hari pada putaran kedua:
{ "_id" : "1", "type":"x", "value":1.23, date : ISODate("2013-05-21T08:00:00Z")}
{ "_id" : "2", "type":"x", "value":1.23, date : ISODate("2013-05-21T17:00:00Z")}
Kami hanya perlu 1 dari 2 catatan, jadi harus menggunakan javascript untuk membersihkan db. Pendekatan awal kami akan beralih melalui hasil dan menghapus bidang apa pun dengan waktu antara 06:00 dan 11:00 (semua duplikat di pagi hari), tetapi selama implementasi, membuat perubahan. Berikut skrip yang digunakan untuk memperbaikinya:
var data = db.data.find({"type" : "x"})
var found = [];
while (data.hasNext()){
var datum = data.next();
var rdate = datum.date;
// instead of the next set of conditions, we could have just used rdate.getHour() and checked if it was in the morning, but this approach was slightly better...
if (typeof found[rdate.getDate()+"-"+rdate.getMonth() + "-" + rdate.getFullYear()] !== "undefined") {
if (datum.value != found[rdate.getDate()+"-"+rdate.getMonth() + "-" + rdate.getFullYear()]) {
print("DISCREPENCY!!!: " + datum._id + " for date " + datum.date);
}
else {
print("Removing " + datum._id);
db.data.remove({ "_id": datum._id});
}
}
else {
found[rdate.getDate()+"-"+rdate.getMonth() + "-" + rdate.getFullYear()] = datum.value;
}
}
dan kemudian menjalankannya mongo thedatabase fixer_script.js