NDB按键值查询

时间:2014-08-14 20:45:25

标签: python google-app-engine python-2.7 flask google-cloud-datastore

使用Python NDB的新功能。

我有类似的东西:

class User(ndb.Model):
    seen_list = nbd.KeyProperty(kind=Survey, repeated=True)

class Survey(ndb.Model):
    same = ndb.StringProperty(required=True)

我希望能够查询未查看某些调查的用户。

我现在正在做的是:

users = User.query(seen_list != 'survey name').fetch()

这不起作用。这样做的正确方法是什么?我是否应首先查询调查列表以获取具有特定名称的调查密钥? !=部分是否正确?

我找不到任何类似的例子。

感谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,如果你的调查是重复的财产,它就不会那样。当您查询重复的属性时,数据存储区会尝试列表中的每个条目,如果一个条目有效,它将返回该项目。因此,当您说“!=调查名称1”时,如果您的列表中至少有一个条目不是“调查名称1”,那么它将返回正数,即使另一个结果是“调查名称1”

如果你来自我认识的SQL背景,这是不明智的......解决这个问题的唯一方法就是以编程方式进行评估并评估查询返回的内容。它来自这样一个事实:对于重复值,Big Table“展平”您的结果,这意味着它会为您重复的属性中的每个值创建一个条目。因此,当它扫描时,它最终会在您的信息中找到一条“正确”的行,从那里抓取对象键,然后返回该对象。