2014-10-09 11 views
5

Ho una classe in parse chiamato TestItem ecco un'istantanea di questa classecontrollare e cancellare i duplicati Parse.com classe

enter image description here

Come si può vedere lo stesso articolo viene il tempo più ma che è va bene perché è in diverse scuole e sale da pranzo, ma questo articolo viene visualizzato due volte allo stesso numero di DiningHallNumber e alla scuola quindi è un duplicato, Oven Roast Potates è a diningHallNumber: 1 e Union College due volte quindi è un duplicato. Quindi sto cercando di scrivere una funzione di codice potrebbe rimuovere questo. Ecco quello che ho finora:

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]); 
} 
} 

, ma questo non funziona perché sarà sempre avvererà Ho bisogno di un modo per vedere se questa è la seconda volta che questo oggetto è venuto in su. Come potrei fare questo?

Grazie per l'aiuto in anticipo !!!

+0

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

+0

@VitorinoFernandes im non del tutto sicuro di come questo si riferisce completamente a quello che sto chiedendo –

+0

@VitorinoFernandes Im più cercando di verificare se c'è un duplicato e rimuoverlo. –

risposta

11

È possibile utilizzare una tabella hash per tenere traccia degli elementi duplicati. Qualcosa di simile:

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

Funziona alla grande, C'è un modo per mantenere il duplicato più vecchio? –

Problemi correlati