আমাদের ডাটাবেসে সদৃশ ডেটা সম্পর্কিত একটি সমস্যা ছিল, একটি তারিখের ক্ষেত্রের একাধিক মান রয়েছে যেখানে আমাদের বোঝানো হয়েছিল। আমি ভেবেছিলাম যে আমরা যেভাবে সমস্যাটি সমাধান করেছি সেইভাবে যুক্ত করব।
আমাদের কাছে একটি সংখ্যার "মান" ক্ষেত্র এবং একটি তারিখ "তারিখ" ক্ষেত্র সহ "ডেটা" নামে একটি সংগ্রহ রয়েছে। আমাদের এমন একটি প্রক্রিয়া ছিল যা আমরা ভেবেছিলাম আদর্শবান, তবে দ্বিতীয় রানের জন্য প্রতিদিন 2 এক্স মান যুক্ত করে শেষ করেছি:
{ "_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")}
আমাদের কেবল দুটি রেকর্ডের মধ্যে 1 টি প্রয়োজন, তাই ডিবি পরিষ্কার করার জন্য জাভাস্ক্রিপ্টটি রিসর্ট করতে হয়েছিল। আমাদের প্রাথমিক পদ্ধতির ফলাফলগুলি পুনরাবৃত্তি হবে এবং সকাল 6 টা থেকে 11 টা (সমস্ত নকলগুলি সকালে ছিল) এর মধ্যে সময় সহ কোনও ক্ষেত্র সরিয়ে ফেলতে হবে, তবে বাস্তবায়নের সময়, একটি পরিবর্তন ঘটেছে। এটি ঠিক করার জন্য এখানে স্ক্রিপ্টটি ব্যবহৃত হয়েছে:
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;
}
}
এবং তারপর এটি দিয়ে চালানো mongo thedatabase fixer_script.js