有人知道使用Parse.com REST API根据给定条件更新多行的方法吗?
想象一下课程"位置"有几个地方。每个项目都有一个列" status"它包含一个枚举字符串值,如" ok"或"错误"。
我想做一些可以在MongoDb中完成的事情,就像这样
db().find(query).update({status: "ok"})
用言语:
"找到与我的查询匹配的所有位置,然后将状态更新为 OK"
在Parse.com REST API批处理操作文档中没有任何关于它的文章,我怀疑Parse.com是否支持这一点。 Parse.com支持batch operations,但显然不支持condition。
我不是在寻找所有物品,然后更新物品的方式,因为这需要太长时间,我们正在谈论成千上万的物品
答案 0 :(得分:1)
一步到位无法做到这一点。与您要查找的内容最接近的是SELECT
MainSet.sum + JustNulls.sum AS [sum], MainSet.category
FROM
(SELECT SUM(X.value) AS [sum], X.category FROM [YourTableHere] X
WHERE X.category IS NOT NULL GROUP BY category
UNION SELECT 0, NULL) MainSet
FULL JOIN
(SELECT SUM(Y.value) AS [sum], Y.category FROM [YourTableHere] Y
WHERE Y.category IS NULL GROUP BY category) JustNulls ON 1=1
函数。 JS API Reference
以下是描述:
saveAll(list,options)
保存给定的Parse.Object列表。如果有的话 遇到错误,停止并调用错误处理程序。
使用示例:
saveAll
通过此操作,您仍然需要查询对象,迭代它们并更新值,然后在更新的对象列表上调用Parse.Object.saveAll([object1, object2, ...], {
success: function(list) {
// All the objects were saved.
},
error: function(error) {
// An error occurred while saving one of the objects.
},
});
。
围绕saveAll
操作存在一些混淆 - 特别是它使用了多少API请求。这种情况不确定是因为Parse已经改变了他们对API请求的收费方式,以及此操作不再适用的情况。
saveAll尝试尽可能少地执行API调用。通常是打电话给 saveAll只导致一个API请求。但是,如果有的话 集合中的对象与另一个未保存的对象有关系 必须首先保存对象,从而产生更多的API请求。
这不再是真的 。 2014年4月,Parse将其定价模式更改为每秒请求数指标,但在那一年后,Parse 更改了批处理API请求的计数方式因为开发人员开始利用批处理操作。
Here is an excerpt of an official Parse statement on the matter:
我们注意到一些开发商滥用此豁免权 严重降低其共享应用程序的性能 集群。我们进一步调查,发现累积影响 即使是预测资源与实际需求之间的不匹配 在具有良好意义的开发人员中间,导致了不稳定 更广泛的制度。
我们取消了豁免,并打算继续使用此模型 向前。也就是说,我们完全理解这将需要 依赖于以前模型的开发人员的变化。
今天使用saveAll
操作将在列表中为每个对象生成1个API请求,有效地为每个单独的对象调用saveAll
。
目前,没有办法避免必须在每个修改过的对象上调用save。希望这是Parse将来考虑添加的东西。