更新多行有条件

时间:2016-01-07 09:34:01

标签: mongodb rest parse-platform batch-processing

有人知道使用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

我不是在寻找所有物品,然后更新物品的方式,因为这需要太长时间,我们正在谈论成千上万的物品

1 个答案:

答案 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请求的收费方式,以及此操作不再适用的情况。

Per this link

  

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将来考虑添加的东西。