【问题标题】:Objectify Query by list's element按列表元素对象化查询
【发布时间】:2016-06-30 09:14:14
【问题描述】:

我正在使用 Objectify 创建实体:

@Entity
public class Collection {

    @Id
    private String name;
    @Index
    private List<Long> viewersIds;

//other fields
}

现在我正在尝试检索具有特定 viewerId 的集合列表,比如说 1。我已经尝试过:

List<Collection> usersCollections = ofy().load().type(Collection.class).filter("viewersIds",1).list();

ofy().load().type(Collection.class).filter("viewersIds =",1).list();

ofy().load().type(Collection.class).filter("viewersIds ==",1).list();

使用以下方法获取所有集合:

ofy().load().type(Collection.class).list();

我做错了什么? 谢谢!

编辑:

将 Colllection 对象更改为包含字符串列表 viewerIds 而不是 Long

@Index
private List<String> viewersIds;

然后查询它:

ofy().load().type(Collection.class).filter("viewerIds", value).list();

有效。因此,如果列表可以是字符串,这可能是一个解决方案。

【问题讨论】:

  • 如果它是一个对象列表,你知道吗?
  • 类似 .filter("users.id IN", values) 的东西,假设您有一个名为“users”的用户对象列表,并且您希望通过属于用户对象的名为 id 的属性进行过滤.

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


【解决方案1】:

要检查的一件事是 viewerIds 确实在应该返回的实体中编入索引:https://console.cloud.google.com/datastore/entities/query

【讨论】:

  • 感谢您的回复! viewerIds 没有被索引,我不知道为什么。
【解决方案2】:

你正在寻找'in'

.filter("<collection> in", value)

【讨论】:

  • 非常感谢!该调用期望 value 是一个集合。但我只是在他们的 viewerIds 列表中寻找具有特定 viewerId 的集合。当然,一种解决方法是创建一个 List 值并向该列表中添加一个元素:viewerId。我已经尝试过了,它有效:ofy().load().type(Collection.class).filter("viewerIds in",values).list();但是,如果我将私有 List viewersIds 从 Collection 对象更改为私有 List viewersIds,我可以使用 ofy().load().type(Collection.class).filter("viewerIds",值).list()
猜你喜欢
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多