【问题标题】:Inequality query not working ndb不等式查询不起作用 ndb
【发布时间】:2016-01-09 19:23:00
【问题描述】:

Session.sessionTypeStringProperty(repeated=True)

当我做这个查询时:

sessions_no_type = Session.query(Session.sessionType == request.sessionType)

一切似乎都正常,我只收到那些包含request.sessionType 的会话

但是当我尝试时:

sessions_no_type = Session.query(Session.sessionType != request.sessionType)

我恢复所有会话(不管request.sessionType

这可能是什么问题?甚至文档也有类似的示例,但它对我不起作用。

尝试此版本时也是如此:

filter = ndb.query.FilterNode("sessionType", "!=", request.sessionType)

当测试是否相等时,它会正确返回所有内容,但不相等的情况只会消除具有 ONE sessionType 等于传递的(请求)sessionType 的 Session 对象

【问题讨论】:

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


    【解决方案1】:

    The != and IN Operations 的文档说:

    !=(不等于)和 IN(成员资格)操作由 使用 OR 操作组合其他过滤器。其中第一个,

    property != value

    实现为

    (property < value) OR (property > value)

    因为您使用的是重复的 StringProperty,所​​以如果 sessionType 中的任何字符串不等于 request.sessionType,则该实体将在查询中返回。

    【讨论】:

    • 阅读文档后,我也尝试过,但没有帮助。它还说!= 运算符稍后会自动转换为> OR <,所以无论如何它应该没有太大区别。
    • @Kkulikovskis,没错。这确定了您的问题的原因。那是你的问题,对吧?
    • 哦,是的。对不起。我有点误读了答案。如果您能提供解决方案,我将不胜感激并检查您的答案。
    • 显然我必须查询所有实体,然后通过循环过滤它们,因为引用文档There is no way to query for entities that do not include a tag equal to 'perl'.
    • 另一种方法是将所有sessionTypes 放入他们自己的模型中,也许将Session 键作为其父项,这样您就可以对它们进行查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多