在一定时间后从特定 class 中删除对象 inParse

delete objects inParse after a set amount of time from a specific class

您好,我有一个可以将照片上传到服务器的应用程序。 Parse 只给了我们 20gb 的存储空间,所以我不想超过这个限制。我想要服务器,以便它可以删除 3 天前的文件。所以这是代码

Parse.Cloud.job('deleteOldPosts', function(request, status) {
// All access
Parse.Cloud.useMasterKey();

var today = new Date();
var days = 10;
var time = (days * 24 * 3600 * 1000);
var expirationDate = new Date(today.getTime() - (time));

var query = new Parse.Query('post');
    query.lessThan('createdAt', expirationDate);

    query.find().then(function (posts) {
        Parse.Object.destroyAll(posts, {
            success: function() {
                status.success('All posts are removed.');
            },
            error: function(error) {
                status.error('Error, posts are not removed.');
            }
        });
    }, function (error) {});

});

但是,如果我使用此代码,它将删除所有 classes 中的文件。我只希望此代码仅适用于一个 class。可以这样做吗?

在云代码中删除对象时,使用 query.each 而不是 query.find 以确保删除所有匹配查询的对象。

find 的查询限制为默认返回 100 个对象(如果使用 limit,则最多为 1000 个)。 Source

下面是您更新后的代码,它使用了对每个 Post 对象调用 destroy 的承诺链。当 all 的 destroy promise 完成时,将达到成功状态,如果 any 的 destroy 失败则达到错误状态.

Parse.Cloud.job('deleteOldPosts', function(request, status) {
    // All access
    Parse.Cloud.useMasterKey();

    var today = new Date();
    var days = 10;
    var time = (days * 24 * 3600 * 1000);
    var expirationDate = new Date(today.getTime() - (time));

    var query = new Parse.Query('post');
    query.lessThan('createdAt', expirationDate);
    query.each(function(post) {
        return post.destroy();
    }).then(function() {
        console.log("Delete job completed.");
        status.success("Delete job completed.");
    }, function(error) {
        alert("Error: " + error.code + " " + error.message);
        status.error("Error: " + error.code + " " + error.message);
    });
});