为什么不能投影相等(EQUAL)或成员身份(in)筛选器中引用的属性



https://developers.google.com/appengine/docs/java/datastore/projectionqueries

为什么不支持这样的投影查询:SELECT a FROM kind WHERE a=1

因为这毫无意义。你在问

SELECT A FROM kind WHERE A = 1

所以,给我A,其中A = 1。你已经知道A = 1了。DB允许这样做毫无意义。

IN查询在内部只是一系列合并在一起的equals查询,因此相同的逻辑也适用于它

这背后的原因可能是,由于您已经拥有要查询的属性的值,因此不需要查询返回这些值。从长远来看,这可能是一件好事,但老实说,这是应用引擎无论如何都应该允许的。即使它实际上没有从数据存储中获取这些值,它也应该将它们添加到后台返回给您的实体中,这样您就可以继续您的业务了。

不管怎样,以下是你能做的…

query = MyModel.query().filter(MyModel.prop1 == 'value1', MyModel.prop2 == 'value2)
results = query.fetch(projection=[MyModel.prop3])
for r in results:
  r.prop1 = 'value1'  # the value you KNOW is correct
  r.prop2 = 'value2'

再说一次,如果能在幕后发生,那就太好了,因为我认为这是任何人都不应该关心的事情。如果我在投影列表中提到一个属性,我已经声明我希望该属性作为我的实体的一部分。我不应该再做任何计算来实现这一点。

另一方面,它只是一个额外的for循环。:(

最新更新