2014-10-09 13 views
5

Ben burada TestItem denilen ayrıştırma bir sınıf Gördüğünüz gibi aynı öğe birden zamanı geldiğinde ama yani bu sınıftakiKontrol ve silme çiftleri Parse.com sınıf

enter image description here

bir görüntüsü olan iyi çünkü farklı okullarda ve yemek salonlarında, ama bu öğe aynı diningHallNumber ve okulda iki kez geliyor, bu yüzden bir çift, Fırın Roast Potates yemekhanede olduğunu: Number 1 ve Union College iki kez bu yüzden bir yinelenen. Bu yüzden bunu kaldırabilmek için bir kod işlevi yazmaya çalışıyorum.

Parse.Cloud.job("removeDuplicateItems", function(request, response) { 

function checkDuplicate(school) { 

    var TestItem = Parse.Object.extend("TestItem"); 
    var testItemsQuery = new Parse.Query(TestItem); 
    testItemsQuery.equalTo('school', schoolArray[i]); 


    testItemsQuery.each(function(testItem) { 
     var item = testItem.get('item'); 
     var school = testItem.get('school'); 
     var diningHallNum = testItem.get('diningHallNumber'); 

     var testItemsQueryCheck = new Parse.Query(TestItem); 
     testItemsQueryCheck.equalTo ('item', item); 
     testItemsQueryCheck.equalTo ('school', school); 
     testItemsQueryCheck.equalTo ('diningHallNumber', diningHallNum); 
     //then delete Item 

} 
var schoolArray = ['Union College (NY)', 'University of Albany', 'Rensselaer Polytechnic Institute']; 

for (var i = 0; i < schoolArray.length; i++) { 
    checkDuplicate(schoolArray[i]); 
} 
} 

ama her zaman doğrudur ben bunun bu madde geldi ikinci kez olup olmadığını görmek için bir yol gerekir gelecektir çünkü bu işe yaramazsa: İşte ben bugüne kadar ne var. Bunu yapmak için nasıl giderim?

Yardımlarınız için şimdiden teşekkür ederiz!

+0

http://stackoverflow.com/questions/20880781/parse-com-find-all-objects-belonging-to-a-user-with-objectid –

+0

@VitorinoFernandes im oldukça emin değil Bu tam olarak ben –

+0

@VitorinoFernandes sormak ne ile ilgilidir bir çoğaltma olup olmadığını kontrol etmek için çalışıyorum ve onu kaldırın. –

cevap

11

Yinelenen öğeleri takip etmek için karma tablosu kullanabilirsiniz. Bir şey gibi:

nasıl
Parse.Cloud.job("removeDuplicateItems", function(request, status) { 
    Parse.Cloud.useMasterKey(); 
    var _ = require("underscore"); 

    var hashTable = {}; 

    function hashKeyForTestItem(testItem) { 
    var fields = ["item", "meal", "schoolMenu", "diningHallNumber", "school"]; 
    var hashKey = ""; 
    _.each(fields, function (field) { 
     hashKey += testItem.get(field) + "/" ; 
    }); 
    return hashKey; 
    } 

    var testItemsQuery = new Parse.Query("TestItem"); 
    testItemsQuery.each(function (testItem) { 
    var key = hashKeyForTestItem(testItem); 

    if (key in hashTable) { // this item was seen before, so destroy this 
     return testItem.destroy(); 
    } else { // it is not in the hashTable, so keep it 
     hashTable[key] = 1; 
    } 

    }).then(function() { 
    status.success("Migration completed successfully."); 
    }, function(error) { 
    status.error("Uh oh, something went wrong."); 
    }); 
}); 
+0

Bu harika çalışıyor, en eski çoğaltmak için bir yolu var mı? –