检查并删除重复的Parse.com类

时间:2014-10-09 18:31:19

标签: javascript parse-platform cloud

我有一个名为testItem的解析类,这是这个类的快照

enter image description here

正如你可以看到同一个项目多次出现,但这很好,因为它是在不同的学校和餐厅,但这个项目在同一餐厅HallNumber和学校两次出现所以它是一个副本,烤箱烤土豆是在diningHallNumber:1和Union College两次,所以它是重复的。所以我试着编写一个can代码函数来删除它。以下是我到目前为止的情况:

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

但是这不起作用,因为它总是会成真我需要一种方法来看看这是否是第二次出现这个项目。我该怎么做呢?

提前感谢您的帮助!!!

1 个答案:

答案 0 :(得分:11)

您可以使用哈希表来跟踪重复的项目。类似的东西:

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.");
  });
});