【问题标题】:How to get the last of each entity in the GAE datastore that starts with 'A', that starts with 'B', etc如何获取以“A”开头、以“B”开头等的 GAE 数据存储中的每个实体的最后一个
【发布时间】:2013-01-27 17:21:43
【问题描述】:

我有一个包含 303 个 Game() 实体的 GAE 数据存储。

class Game(db.Model):
    title = db.StringProperty(required = True)
    slug = db.StringProperty(required = True)
    category = db.CategoryProperty()
    description = db.TextProperty(required = True)
    created = db.DateTimeProperty(auto_now_add = True)

“slug”属性与标题类似,只是它用连字符替换所有空格并删除所有特殊字符。例如:(“第一场比赛!”变成“第一场比赛”)

在网站上,我列出了所有使用 Bootstrap 折叠手风琴的 303 游戏。它工作得很好,但是因为有这么多游戏,我试图设置一个列出字母表的侧面导航。用户将单击其中一个字母以跳转到列表的特定位置。例如:(用户点击“N”,页面跳转到以“N”开头的游戏)。

我知道这是可行的,因为如果我将“slug”硬编码到 HTML 中,它会正确跳转到所需位置。但是,“slug”必须在正确的“slug”之前一,否则它不会正确跳跃。例如:(用户点击'N',HTML中的slug需要'my-last-m-game'才能跳转到正确的位置,并在页面顶部显示'N'个游戏)。

我的问题(对于冗长的解释感到抱歉)是,是否可以通过 GQL 查询来获取字母表中每个字母的最后一场比赛?还是将所有游戏放在列表/字典中并以这种方式获得正确的“slug”更好?或者我应该向数据本身添加一个属性,它允许我只搜索“A”游戏或“T”游戏的 GQL 搜索,以获得正确的“slug”。或者是否有我可以在 Bootstrap 中使用的偏移量,这将允许我获得第一个“N”游戏“slug”并使用它跳转到页面上的正确位置?

感谢您提供的任何帮助。这是我第一次在stackoverflow上发帖,如果我做的不对,请道歉。

【问题讨论】:

    标签: google-app-engine twitter-bootstrap google-cloud-datastore gql


    【解决方案1】:

    另一种选择是在 Game 上设置一个名为 lastGameForLetter 的字段,对于大多数游戏,该字段设置为 null)。插入游戏时,需要进行额外检查以确保不需要更新,但会使查询更容易。对于很少写但经常阅读的东西,我们一直在做这样的事情。

    【讨论】:

      【解决方案2】:

      您可以对字符串使用前缀匹配。 u"\ufffd" 是最高可能的 unicode 字符,因此按名称查询

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 2018-06-09
        相关资源
        最近更新 更多