Google Cloud Datastore是否支持Mongodb $ set等部分更新?

时间:2016-03-09 06:43:46

标签: node.js google-app-engine google-cloud-datastore

我正在使用Node.js,并且不希望用每一个小更新覆盖整个实体,并且大部分时间只需更新特定属性,例如计数器。

关于如何在文档中执行此操作,没有明显的参考。

Node.js版Google Cloud Datastore是否支持Mongodb $ set等部分更新?

2 个答案:

答案 0 :(得分:5)

没有DataStore API可以更新put()和putmulti()以外的实体,所以它很安静。

一些阅读from here说明原因。

  

在内部,App Engine将实体存储在协议缓冲区中,用于序列化结构化数据的有效机制;有关详细信息,请参阅开源项目页面。不是将每个实体属性存储为相应Bigtable行中的单个列,而是使用单个列,其中包含二进制编码的协议缓冲区,其中包含给定实体的每个属性的名称和值。

简而言之,数据存储区中的实体行是底层存储方案中的单个二进制值,这就是没有用于部分更新的API的原因。

答案 1 :(得分:0)

没有直接API只更新实体的一个属性。

但是,您可以使用Datastore transactions,而不是获取实体,修改它并更改它(使用两个不同的数据存储区API调用)。这是以原子方式实现这一目标的推荐方法。

  

交易是一组或多个实体上的一组Google Cloud Datastore操作。每个事务都保证是原子的,这意味着事务永远不会部分应用。应用事务中的所有操作,或者不应用任何操作。

example in the documentation正在解释如何使用事务“使用相对于其当前值的新属性值更新实体:。这正是您要查找的内容。