我们正在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()试着!