【问题标题】:How to update array property values in Google Cloud Datastore如何更新 Google Cloud Datastore 中的数组属性值
【发布时间】:2020-06-24 14:12:20
【问题描述】:

我在 Firestore 模式下为我的 Google App Engine 应用使用 Datastore。我知道如何在 Google Cloud Datastore 中存储列表/数组属性值。但是如何更新这些值(例如:向列表中添加新值?)我在文档中找不到示例。

这是您最初将列表属性添加到数据存储区的方式:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity user = new Entity("User");
List<String> items = new ArrayList<String>();
user.setProperty("ItemsList", items);
datastore.put(user);

但是,如果稍后我想访问用户实体的项目列表并将项目添加到该列表中,该怎么办?

【问题讨论】:

  • 您可以使用arrayUnion() 和arrayRemove()。如果this document 有帮助,请告诉我
  • 该文档来自 Cloud Firestore。我在 Datastore 模式下使用 Firestore(也就是我认为我只能访问 Datastore 方法)。还能用吗?

标签: java google-app-engine google-cloud-firestore google-cloud-datastore


【解决方案1】:

感谢您的澄清。现在我了解到您希望能够只向该列表添加内容,而不是覆盖整个列表。

documentation 阅读数据存储区我可以看到您不能只更新属性。

要更新现有实体,请修改实体的属性 以前使用密钥检索并存储它

在你的情况下,你会做一些事情,比如检索列表的数据,然后附加新元素或更新该列表中的某些内容,然后再次更新整个列表,例如:

Entity task = Entity.newBuilder(datastore.get(user)).set("ItemsList", items).build();
datastore.update(user);

【讨论】:

  • 我明白了,所以我必须更新整个用户实体。我将如何检索列表的数据,我必须查询它吗?
  • 另外,如果我创建一个新实体只是为了更新项目列表 - 它会保留该实体的任何其他设置属性吗?还是我必须重新设置它们?我只是发现文档有点缺乏细节或清晰度。
  • 是的,您必须query 属性并获取列表。如果您使用“upsert”创建新实体,这将覆盖所有现有属性,如果您使用“插入”,则需要您使用未使用的实体名称。所以这里最好的方法就是更新。
猜你喜欢
  • 1970-01-01
  • 2018-12-29
  • 2017-03-07
  • 1970-01-01
  • 2021-02-21
  • 2021-04-05
  • 2018-11-18
  • 2019-07-11
  • 2020-10-03
相关资源
最近更新 更多