删除具有重复键名 parse.com 的对象

Delete objects with repeated keyname parse.com

我在 parse.com 上有一个 class,其中包含许多对象。每个对象的键之一是国家名称。如何以编程方式删除具有重复国家名称键的所有对象。我能想到的唯一方法是非常冗长,所以任何想法都将不胜感激。

这是我能想到的最好的。

var objectId = [String]()
        var Country = [String]()
        var city = [String]()
        var deletes = [String]()
        var query = PFQuery(className: "Route")
        query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
            for object in objects {
                objectId.append(object.objectId)
                Country.append(object["Country"] as String)
                city.append(object["Start"] as String)
            }
            println(objectId)
            println(Country)
            var i = Int()
            for i=0; i < objectId.count; i++ {

                var j = Int()
                for j = i + 1 ; j < objectId.count; j++ {
                    if Country[i] == Country[j] {
                        println(objectId[j])
                        var deleteQuery = PFQuery(className: "Route")
                        deleteQuery.getObjectInBackgroundWithId(objectId[j], block: { (object: PFObject!, error2: NSError!) -> Void in
                            if error2 == nil {
                                object.delete()
                            }
                        })

                    }
                }
            }
        }

我相信一定有更简单的方法。

您的做法是正确的,请记住将限制从默认的 100 更改为 1000。

如果您需要在超过 1000 行的 table/class 上执行此操作,则需要创建一个服务器端作业来执行此操作并使用 query.each() 函数进行迭代所有行,然后清理重复项。

我认为您可以通过创建 NSMutableSet 个国家/地区名称来使重复搜索更简洁一些。 运行 通过返回的对象将国家名称添加到集合中,testing membership 预先。如果对象的国家/地区已经在集合中,请将其添加到 duplicates.

的可变数组中

您的代码的删除部分可以大大改进。在基于集合的测试填充重复数组后,使用 PFObject(deleteAllInBackground:duplicates) 这将替换所有从 for i=0; i < objectId.count; i++ {

开始的代码