我有一个名为Posts的密钥,密钥是postId。
postId格式为:YYMMDDXXX。其中XXX是3位数序列号。
例如:150703001,150704001,150704002
如何从数据存储区中的实体获取序列号?我想将此SQL Select nvl(max(substring(postId, 7, 3)), 0) from posts where substring(postId, 1, 6) = '150704'
转换为Objectivy过滤器。
请帮助,非常感谢!
答案 0 :(得分:0)
您必须将您的种类/实体重新设计为不同的结构才能实现此目的。数据存储区无法按子字符串进行搜索。
可能的方法是这种布局:
@Entity
class PostGroup {
@Id
String id; // this is will hold the formatted date YYMMDD
}
@Entity
class Post {
@Id
Long id; // auto generated ID
@Index
Long sequence; // the sequence number
@Parent
Key<PostGroup> group;
}
现在,您可以为您的Objectify查询设置PostGroup
包含祖先,sort by Post.sequence desc limit 1
以查找最新帖子。
String yymmdd = "150704";
Key<PostGroup> postGroupKey = Key.create(PostGroup.class, yymmdd);
Query<Post> query = ofy().type(Post.class).ancestor(postGroupKey).order("-sequence");
Post latestPost = query.first().now();
注意:您不必实际坚持PostGroup
将其用作祖先。