parse-platform - 如何删除Parse中满足某些条件的行?

标签 parse-platform parse-cloud-code

有没有办法有效地删除 Parse 中执行类似 SQL 语句的行?

DELETE FROM table WHERE delete_me = 1

我试过这个,但它很慢:
var query = new Parse.Query('table');
query.equalTo('delete_me', 1);

query.each(function(obj) {

    return obj.destroy();

}).then(function() {
    // Done
}, function(error) {
    // Error
});

最佳答案

差不多了:find() 将获得满足删除条件的对象,然后 destroyAll() 将销毁它们。

var query = new Parse.Query('table');
query.equalTo('delete_me', 1);
query.find().then(function(results) {
    return Parse.Object.destroyAll(results);
}).then(function() {
    // Done
}, function(error) {
    // Error
});

编辑 - 要删除超过 1k 的表,需要额外的一些 promise 工作。这个想法是通过表游标,以 1k 的批次(或一些较小的增量)对发现进行分组,使用 Promise.when() 同时执行这些发现,然后以相同的方式同时销毁结果......
var query = new Parse.Query('table');
query.equalTo('delete_me', 1);
query.count().then(function(count) {
    var finds = [];
    for (var i=0; i<count; i+=1000) {
        finds.push(findSkip(i));
    }
    return Parse.Promise.when(finds);
}).then(function() {
    var destroys = [];
    _.each(arguments, function(results) {
        destroys.push(Parse.Object.destroyAll(results));
    });
    return Parse.Promise.when(destroys);
}).then(function() {
    // Done
}, function(error) {
    // Error
});

// return a promise to find 1k rows starting after the ith row
function findSkip(i) {
    var query = new Parse.Query('table');
    query.limit(1000);
    query.equalTo('delete_me', 1);
    query.skip(i);
    return query.find();
}

编辑 2 - 这可能更快,但您需要凭经验发现:
// return a promise to delete 1k rows from table, promise is fulfilled with the count deleted
function deleteABunch() {
    var query = new Parse.Query('table');
    query.limit(1000);
    query.equalTo('delete_me', 1);
    query.find().then(function(results) {
        return Parse.Object.destroyAll(results).then(function() {
            return results.length;
        });
    });
}

function deleteAll() {
    return deleteABunch().then(function(count) {
        return (count)? deleteAll() : Parse.Promise.as();
    });
}

关于parse-platform - 如何删除Parse中满足某些条件的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934448/

相关文章:

iOS:特定 View Controller 类的 didReceiveRemoteNotification

parse-platform - 解析 - 安装表未设置 deviceToken 或 pushType

javascript - Parse.com JS 使用 query.find() 时循环遍历数组

javascript - Parse Cloud Code Promise 的问题

ios - 正在运行解析 getDataInBackgroundWithBlock :progressBlock: the same as creating a new thread using GCD?

ios - 解析 saveEventually 保存空对象

android - Parse.com 从云 clode 函数接收 JSON 数组

android - 调用 Parse 云函数时错误的 json 响应

javascript - 解析.com : Remove public read access for array of objects

ios - 使用 CloudCode 发送有针对性的推送通知