【问题标题】:Does Google Cloud Datastore support partial update like Mongodb $set?Google Cloud Datastore 是否支持像 Mongodb $set 这样的部分更新?
【发布时间】:2016-03-09 06:43:46
【问题描述】:

我正在使用 Node.js,并且不想每次更新都覆盖整个实体,并且大多数时候只需要更新特定属性,例如计数器。

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

Node.js 版本的 Google Cloud Datastore 是否支持像 Mongodb $set 这样的部分更新?

【问题讨论】:

  • afaik,Datastore 不支持部分更新
  • 这太糟糕了。但感谢您确认。

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


【解决方案1】:

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

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

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

example in the documentation 正在解释如何使用事务来“使用相对于当前值的新属性值更新实体:。这正是您要寻找的。​​p>

【讨论】:

    【解决方案2】:

    除了 put() 和 putmulti() 之外,没有用于更新实体的 DataStore API,所以这几乎是不可能的。

    阅读from here 会告诉你原因。

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

    简而言之,Datastore 中的实体行是底层存储方案中的单个二进制值,这就是为什么没有用于部分更新的 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 2019-01-08
      • 2020-05-29
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 2019-06-05
      相关资源
      最近更新 更多