【问题标题】:How to filter against a StringListProperty that does not contain an item?如何过滤不包含项目的 StringListProperty?
【发布时间】:2009-12-13 13:04:10
【问题描述】:

我有以下用户模型,我想获得所有喜欢“黄色”但不喜欢“红色”的用户。

class User(db.Model):
    name = db.StringProperty(required=True)
    favorite_colors = db.StringListProperty(required=True)

这可行(返回至少有一种最喜欢的颜色“黄色”的所有用户):

results = db.GqlQuery(
    "SELECT * FROM User "
    "WHERE favorite_colors = 'yellow'")

但这并没有达到我的预期:

results = db.GqlQuery(
    "SELECT * FROM User "
    "WHERE favorite_colors = 'yellow' "
    "and favorite_colors != 'red'")

返回相同的用户列表。我相信它正在测试最喜欢的颜色是否与“红色”不同,而不是列表根本不包含“红色”。

如何仅过滤包含一个项目而不包含另一个项目的结果?

【问题讨论】:

    标签: google-app-engine gql gqlquery


    【解决方案1】:

    您无法过滤缺少的项目。您的第二个查询查找列表中包含“黄色”项目的所有人,以及至少一项不是“红色”的项目。

    如果您的项目集有限,您可能希望更改您的表示以包含“非”条目 - 例如,“黄色”、“非蓝色”、“非红色”。否则,您需要在 Python 代码中进行过滤。

    【讨论】:

    • 我不知道我是否能够在 Python 代码中进行过滤,因为我的“颜色”集有约 3k 项,而“用户”约 40k,并且数据存储 API 仅返回前 1000 个结果...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 2020-01-02
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多