【问题标题】:Getting the "Closest" Value out of the Datastore从数据存储中获取“最接近”的值
【发布时间】:2010-10-15 23:56:21
【问题描述】:

根据最接近提供的值从数据存储中获取单个实体的推荐(读取最有效)方法是什么。

例如,我有以下 DataModel:

class MyObject(db.Model):
    someValue = db.IntegerProperty()
    shortDescription = db.TextProperty()

在 GET 期间传入一个值,我想在数据存储中查询最接近提供值的对象。

如果它们的距离相同,则可以有多个结果。 IE。如果我有两个对象的 someValue 分别为 2 和 4 并且我传入 3.

任何建议将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    自动为所有属性创建升序和降序索引,因此您可以执行以下操作:

    results1 = MyObject.all().order('someValue').filter('someValue >=', 3).fetch(50)
    results2 = MyObject.all().order('-someValue').filter('someValue <', 3).fetch(50)
    

    这将为您提供两个结果集,在您的搜索值附近最多包含 100 个对象。

    【讨论】:

    • 谢谢,我希望只查询一次,但这很有效。
    【解决方案2】:

    GQL 查询GqlQuery("SELECT * FROM MyObject WHERE someValue &lt; :1 ORDER BY someValue DESC", input).get() 将返回最接近且小于输入值的一项。

    要获得最接近并大于输入的项目,请将其切换:SELECT * FROM MyObject WHERE someValue &gt; :1 ORDER BY someValue ASC"

    不幸的是,我认为没有办法进行这个查询,但我可能错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2012-10-30
      • 1970-01-01
      • 2020-03-20
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多