【发布时间】:2013-10-18 12:29:56
【问题描述】:
我想知道为什么您需要在投影查询中包含某些属性。我正在尝试获取不同的“foo”属性列表。
Object.query(projection=[Object.foo], distinct=True) \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch()
即使建议的索引已启动并正在运行,这也会产生 NeedIndexError。原因是基于 bar >= value 的第二个过滤器。通过删除该过滤器,查询可以完美运行,但没有达到目标。
Object.query(projection=[Object.foo, Object.bar], distinct=True) \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch()
这个可行,但现在你得到的结果不是只有不同的 foo,而是 foo 和 bar 的 carthesian 乘积。这不是我们最初的目标。
Object.query() \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch(projection=[Object.foo])
这也可以,但无法按“foo”分组,因此导致列表包含重复的“foo”值。
正如您在上面看到的,有一些解决方案可以解决这个问题,但两者都会导致更大的响应列表。如果可能的话,我想避免这种情况。因此我有两个问题:
- 为什么 filter() 中的属性有时需要包含在投影中?这对我来说没有意义。另外,为什么这会导致 NeedIndexError 而不是更合适的结果?
- 是否有没有上述缺点的解决方案?或者,也许我从错误的角度解决了这个问题?欢迎任何建议。
【问题讨论】:
标签: python google-app-engine app-engine-ndb