使用 objectify 进行过滤和排序的 GAE 数据存储查询

2023-12-08

我正在尝试在数据存储中查询过去一周(日期字段)登录的得分最高的 100 位用户。

List<User> users = ofy().load().type(User.class)
   .filter("date >", date).order("date")
   .order("-points").limit(100).list();

它似乎忽略了按点的最终排序,而是返回按日期排序的列表。 如果我删除日期过滤器并排序,那么我会得到按点很好地排序的列表,但包括一周多前登录的用户。

我仔细阅读了文档,它似乎允许包含不等式过滤器和多种排序的查询。

有什么想法我做错了吗?

以下是文档中的一些相关注释:

由于 App Engine 数据存储区执行查询的方式,如果查询指定对某个属性指定不等式过滤器并对其他属性指定排序顺序,则不等式过滤器中使用的属性必须排在其他属性之前。

...如果查询指定一个或多个不等式过滤器以及一个或多个排序顺序,则第一个排序顺序必须引用不等式过滤器中指定的相同属性。


您所观察到的是应用程序引擎使用的基于索引的查询的标准预期行为。在过滤时,如果您应用不等式过滤器(只能在查询中的一个属性上使用),那么当您有多个排序顺序时,第一个排序将针对该属性,然后可以基于其他属性进行进一步排序。为了基于日期的不等式过滤器进行查询并按点排序,数据存储将使用如下所示的索引,其中日期属性按升序或降序排列:

day 1 -  100
day 2 -  30
day 2 - 90
day 2- 10
day 3 - 50
day 4 - 40
day 5 - 60 

现在,如果您使用 day > day1 的不等式过滤器进行查询,那么查询将搜索上面的索引并返回下面的结果,即使您没有明确提及,这些结果也已经按照日期排序:

day 2 -  30
day 2 - 90
day 2- 10
day 3 - 50
day 4 - 40
day 5 - 60

现在,如果您正在对日期使用不等式过滤器进行查询,并在点上添加排序顺序,那么就像对已按日期排序的上述结果应用附加排序一样。这就是为什么您被迫明确提及日期作为第一排序顺序(因为默认情况下它已经存在),然后提及点作为第二排序顺序。 结果会像下面这样。查看第 2 天完成的排序:

day 2 -  10
day 2 - 30
day 2- 90
day 3 - 50
day 4 - 40
day 5 - 60

因此,如果您想实现逻辑,您需要从应用程序引擎检索数据并进行一些额外的排序,如下所示:

1,使用日期不等式过滤器获取,然后在客户端根据点进行适当的排序以获得前 100 个。

2、根据点的降序索引获取排名靠前的结果(大约300个),然后根据客户端的日期过滤它们以获得所需的100个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 objectify 进行过滤和排序的 GAE 数据存储查询 的相关文章

随机推荐

  • 是否可以在 x 轴(经度)上移动 geopandas 世界地图?

    我想知道是否有一种方法可以将 geopandas 世界地图集中在特定的经度点上 基本上 只是想将其移动约 5 10 度左右 上一个问题是几个月前发布的 但没有收到答案 想知道是否有人知道解决方案 stackoverflow 上原始问题的链接
  • 循环遍历具有特定扩展名的所有文件并对其执行某些操作

    这是我第一次使用 Linux shell 脚本 它看起来确实很强大 但我仍然有点困惑 我想循环遍历目录中具有特定扩展名的所有文件递归地 所有子目录 子子目录和 并通过在它们上运行可执行文件在原始文件的确切位置生成一个具有相同名称但扩展名不同
  • 从两列映射中对多对多关系进行分组

    我有一个 SQL 表 可以映射作者和书籍等内容 我想将链接的作者和书籍 同一作者撰写的书籍以及共同撰写一本书的作者 分组在一起 并确定这些组的规模有多大 例如 如果 J K 罗琳与朱诺 迪亚兹合写 朱诺 迪亚兹与扎迪 史密斯合写了一本书 那
  • 单击 UIWebView 上的链接时打开新的 UIViewController

    我发现这个线程符合我的问题 单击 UIWebView 中的链接会推送到 NavigationView 堆栈 但以下情况有所不同 我没有使用导航控制器 而是使用基于视图的应用程序在按下相应按钮时手动切换到不同的视图控制器 我没有使用链接 而是
  • Excel VBA:形状集合中的索引 = ZOrderPosition?

    工作表的 Shapes 集合中形状的索引是否始终与其 ZOrderPosition 相同 原则上不能直接查询给定形状的索引 我已经在少数情况下 最多 3000 个形状 验证了这一点 但我没有找到任何相关文档 我遍历了整个集合 询问 Inde
  • 无法解析 Spring 属性占位符

    我有我的配置
  • 将一个正则表达式匹配替换为另一个正则表达式匹配,反之亦然

    我需要替换为字符串foo bar foo bar bar foo all foo to bar和所有bar to foo 所以结果应该是这样的bar foo bar foo foo bar 我已经尝试过这种方式 library string
  • 如何使用 EF Core 2.2 将 JSON_VALUE 转换为 DateTime?

    我正在测绘JSON VALUE使用来自的技术如何编写DbFunction的翻译 由于 JSON 中并非所有值都是字符串 因此有时需要进行转换 当转换为int 一切安好 var results context Set
  • JasperReports:如何屏蔽或过滤图表轴上的标签

    我正在使用基于简单数据集的简单面积图 如下所示 DateTime sql timestamp Value Integer 2012 02 17 00 02 02 100 2012 02 17 00 02 08 110 2012 02 17
  • `margin:auto;` 不适用于内联块元素

    我有一个 容器 div我给了margin auto 只要我给它一个特定的 它就工作得很好width 但现在我把它改为inline block and margin auto 停止工作 旧代码 有效 container border 1px
  • Java 非最终 int(s) 构造后可见

    我有一个带有非最终 int 变量的 java 类 我在构造函数中将其显式初始化为 0 对该变量的所有其他访问均由 ReentrantLock 管理 我是否需要担心线程不会看到初始值 0 因为我没有在构造函数中使用锁 是的 你必须担心 为了避
  • 如何通过命令提示符获取硬件 ID/序列号?

    最终我将在 Java Applet 中使用它来为用户提供额外的安全性 我知道这是可能的 因为我记得以前做过 只是不记得获取正确信息的行 我正在寻找将返回处理器 ID 序列号的行 只要这两个就好了 我使用过谷歌并尝试了一些命令 例如 wmic
  • SQL Server 2005 中使用 XML 的层次结构

    我想知道是否有办法在 SQL Server 2005 中选择层次结构并返回 xml 格式 我有一个包含大量数据的数据库 大约 2000 到 3000 条记录 我现在使用 SQL Server 2005 中的一个函数来检索层次结构中的数据并返
  • C#中如何获取IP地址?

    假设一台计算机连接到许多网络 实际上不止一个 我可以获得一个IP地址列表 其中包括计算机在网络中拥有的所有IP地址 但是我如何知道某个IP地址属于哪个网络呢 首先 您需要了解一些术语 这些示例数字假定 IPv4 网络 IP地址 192 16
  • 如何为 Json.net 生成 json 对象的所有可能的 LINQ 字符串?

    在 json net 中 我们可以使用基于 linq to json 的本教程 我想知道有没有办法生成字符串查询 考虑这个 json 示例 Name Test Status S1 S2 S3 S4 People Name A Family
  • 使用facet_wrap向ggplot添加图例

    我在用小面包裹显示两个变量 a and b 四个城市 我可以根据城市对图进行分组 但无法显示变量的图例 即a and b using scale color discrete ggplot geom line data df aes x y
  • Angular 7 - 重新加载数据表中的数据

    我正在使用 Angular 7 和 Angular Datatables 我正在尝试定义一个 重新渲染 按钮以重新加载数据就像这个例子一样 我不明白应该在渲染函数中放置什么 我的API函数 fn getFavoriteTables this
  • SQL Server 查询日期范围内一个月的总天数

    我有特定的日期范围 例如 From Date To Date 2012 11 10 2012 11 15 2012 11 21 2012 11 22 2012 11 30 2012 12 01 我想编写一个 SQL 查询来计算两个日期之间的
  • KML / Google 地图 - 指定 iFrame 中嵌入地图的缩放级别

    我在 Google 地图中加载了以下 kml 文件 它正确定位了指针 但它始终以最大级别缩放 使用谷歌地图 API 我可以设置自己的缩放级别 但我尝试使用 iFrame 中的嵌入式地图 由谷歌提供 来执行此操作 有没有办法在 kml 本身中
  • 使用 objectify 进行过滤和排序的 GAE 数据存储查询

    我正在尝试在数据存储中查询过去一周 日期字段 登录的得分最高的 100 位用户 List