0

我已经开始使用 Mobile Backend Starter 实现我自己的示例,但无法解决一个查询问题。根据规范https://developers.google.com/appengine/docs/java/datastore/queries使用过滤器对单值或多值属性进行查询应该没有区别。

不幸的是,我无法使用 Mobile Backend Starte 页面上提供的 Android 应用程序示例。

这是我用来添加多值属性的代码:

newPost.put("tags", Arrays.asList("one","two","three"));

以及我用来获取包含指定属性之一的每条记录的过滤器:

CloudQuery query = new CloudQuery("Guestbook");

query.setFilter(F.eq("tags","two"));

getCloudBackend().list(query, handler);

结果总是返回一个空列表。如果未指定过滤器,则所有属性都按预期从后端返回。

是否可以使用当前实现查询多值属性?

4

2 回答 2

0

据我所知,关于 Mobile Backend Starter 的答案是否定的。虽然我不知道 google-cloud-endpoints。

如果我理解正确,您发送一个CloudEntity( newPost) ,其属性为 a List。在移动后端启动器的“文档”中,他们说支持的类型之一CloudEntity是:

列表/地图:

可以包含长字符串(超过 500 个字符)和子 List/Map 的 java.util.List 或 java.util.Map 对象。这些元素在 Datastore 上没有索引,不能用作查询过滤/排序条件。空列表/地图未存储在数据存储中

所以你不能使用那个 List/Map 作为过滤器

于 2013-08-18T15:28:06.463 回答
0

可以查询多值属性。您可以使用过滤谓词

Filter tagfilter = new FilterPredicate("tags",
                      FilterOperator.EQUAL,
                      "two");
query.setFilter(tagfilter);
于 2013-07-02T19:29:36.950 回答