【问题标题】:Google datastore multiple values for the same propertyGoogle 数据存储同一属性的多个值
【发布时间】:2015-06-09 13:44:27
【问题描述】:

我正在将 Google Datastore 用于 Android 应用程序,后端是用 Java 编写的。在一个表中,我想为同一个属性设置多个值:

Entity newGroup = new Entity("group");
newGroup.setProperty("member", "A");
newGroup.setProperty("member", "B");
newGroup.setProperty("member", "C");
datastore.put(newGroup);

然后我想查询以查找用户所属的所有组,我执行以下操作:

    Query.Filter filter = new Query.FilterPredicate("member", Query.FilterOperator.EQUAL, "A");
    Query q = new Query("group").setFilter(filter);

    PreparedQuery pq = datastore.prepare(q);

但是,查询不会产生任何结果。在文档中提到,如果属性的至少一个值与过滤器匹配,则返回实体,这让我感到困惑。

谢谢!

【问题讨论】:

  • 您的放置和查询之间需要多长时间?
  • 动作是由用户交互触发的,所以我认为这应该不是问题。
  • 嗯,最终一致性是数据存储的一个重要概念,所以是的,它可能是相关的。
  • 在您的示例中,member 将等于 C,因为您正在覆盖 AB。根据 Andrei 的回答,您需要 List<String>

标签: android google-app-engine google-cloud-datastore


【解决方案1】:

应该是:

List<String> members = new ArrayList<String>(3);
members.add("A");
members.add("B");
members.add("C");

Entity newGroup = new Entity("group");
newGroup.setProperty("member", members);
datastore.put(newGroup);

【讨论】:

  • 它对我不起作用。数据存储中的条目如下所示: id=5073368378245120 [{"stringValue":"A,B,C"}] 但是查询仍然没有找到它。
  • 我不认识这种表示形式。在 Datastore 查看器中应该如下所示:["A","B","C"]
  • 哦,你是对的。问题完全出在其他地方......对此感到抱歉。问题是我有一个 Cloud Endpoints 方法 @ApiMethod(name = "addGroup") public void addGroup(@Named("session") String sessionString, @Named("members") List members) throws ForbiddenException { }当我从代码中调用该方法时,如果从客户端调用该方法并使用 3 个条目的 ArrayList,则第二个参数(列表)只有一个条目,其形式为“A、B、C”。有什么想法吗?无论如何感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
相关资源
最近更新 更多