我想知道为什么您需要在投影查询中包含某些属性。我正在尝试获取不同的“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 而不是更合适的结果?
- 有没有没有上述缺点的解决方案?或者,也许我从错误的角度解决了这个问题?欢迎任何建议。