物化只有键的查询?
我想检查数据库中是否存在cert实体,只使用按键查询。到目前为止,我在做:物化只有键的查询?
Iterable<Key<LikeMW>> liked = ofy().load().type(LikeMW.class).filter("likedObject", postKey).filter("user", userKey).keys();
post.setLiked(liked.iterator().hasNext());
所以我有2个问题:
1 - 如果我使用 “首先()现在()” 之后 “.keys()”,对不对从“仅键”切换,还是仍然是“仅键”查询?
2 - 有没有更好的方法来检查使用“仅键”查询和过滤器是否存在证书实体?
谢谢你们!
UPDATING
@Entity
public class LikeMW {
@Id
private Long id;
@JsonIgnore
@Index
@Load
private Ref<UserMW> user;
@JsonIgnore
@Index
private Key likedObject;
...
}
和可能喜欢的对象之一......
@Entity
public class PostMW{
@Id
private Long id;
@JsonIgnore
@Load
private Ref<UserMW> owner;
@JsonIgnore
@Load
private Ref<MediaMW> media;
...
}
用于权威性查找是否存在一个实体的唯一方法是关键加载它。你当然可以做一个只有键的查询,但它会最终一致,并不能保证你不会创建重复。
考虑到您正在尝试做的事情,您几乎可以肯定会更好地使用用户的父母LikeMW
并使用串化的LikeObject作为字符串ID。这样你可以做一个强有力的一致查找和使用交易。
关于为用户管理'LikeMW'唯一的问题是1用户可以喜欢成千上万的东西,然后所有的时间我加载一个用户,我会加载数千'LikeMW'在一起。听起来很糟糕。 –
这不是它的工作原理。如果你加载一个'User',你只加载'User'实体中的内容。仅仅因为其他实体具有指向某个User的'@ Parent'字段不会改变'User'的加载行为。 – stickfigure
你的第二个问题很难在不知道你的实体的情况下回答。您可以创建一个像@Id一样使用像_ObjectId_userId这样的固定模式的实体。然后你可以直接通过它的键访问实体,只需要一次索引读取。如果你的实体包含超过这两个属性,那不起作用。 – konqi
使用实体更新。 –