在Cloud Code中更新或删除Array中的非指针元素

时间:2016-06-06 14:33:57

标签: javascript arrays json parse-platform cloud-code

我们正在Parse.com上运行一些代码(是的,仍然是迁移很慢,这不应该是问题),我们正在尝试为我们的高分设置竞赛列表,基本上创建了一些简短的术语列表。

我想更新数组中的元素,以更改某些值。元素是JSON对象,如下所示:

{
    "firstPlay":"2016-06-06T12:51:30.009Z",
    "lastPlay":"2016-06-   06T13:52:17.864Z",
    "name":"NAME","plays":19,
    "score":897817,
    "user":   {"objectId":"7jGpJE7KZ5"}
}

我们做的第一个解决方案是获取对象列表,更改当前用户的元素,然后保存包含列表的对象。显然,即使在小规模测试中,这也会导致一些数据丢失。我想我们需要使用.add和.remove来解决这个问题。如果有一种方法可以简单地更新列表中的元素,我会喜欢它,但我还没有找到它。

无论如何,我们运行的代码如下所示:

var list = results[contest].get("list");
for(var i = 0; i < list.length; i++){
    newEntry = list[i];
    console.log("found user!" + request.user.id);
    foundUser = true;
    if(newEntry.score < request.params.score){
        newEntry.score = request.params.score;
    }
    newEntry.plays++;
    newEntry.lastPlay = new Date(Date.now());

    results[contest].remove("list",list[i]);
    results[contest].save().then(function(removed){
        console.log("contest is saved!");
        results[contest].add("list",newEntry);
        results[contest].save();
    }); 
}

控制台打印“比赛已保存!”正如预期的那样,但旧的条目没有删除 - 我添加了新的条目,这些条目充斥我的名单。

我认为这与Parse检查列表中对象相等性的方式有关,而我发现的例子都使用了Parse对象的数组,我没有使用它。有没有人知道更新列表元素的方法,而不存在丢失数据的风险?

我们目前正在寻找的解决方案是更改结构以引用不同类的Parse对象,而不是JSONS,但我只是不明白为什么我们不能像我这样使用.remove()试着!

0 个答案:

没有答案