https://developers.google.com/appengine/docs/java/datastore/projectionqueries
为什么这样的计划查询:SELECT A FROM kind WHERE A = 1 not supported?
https://developers.google.com/appengine/docs/java/datastore/projectionqueries
为什么这样的计划查询:SELECT A FROM kind WHERE A = 1 not supported?
因为没有意义。你在问
SELECT A FROM kind WHERE A = 1
所以,给我A
在哪里A = 1
。嗯,你已经知道了A = 1
。DB允许这样做是没有意义的。
查询在IN
内部只是一系列合并在一起的等于查询,因此同样的逻辑适用于它。
这背后的原因可能是,由于您已经拥有要查询的属性的值,因此不需要查询返回它们。从长远来看,这可能是一件好事,但老实说,这是 App Engine 无论如何都应该允许的。即使它实际上没有从数据存储中获取这些值,它也应该将它们添加到幕后返回给您的实体中,以便您可以开展业务。
无论如何,这就是你可以做的......
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'
同样,如果这发生在幕后会很好,因为我认为这不是任何人都应该关心的事情。如果我在投影列表中提到一个属性,我已经声明我希望该属性作为我的实体的一部分。我不应该做更多的计算来实现这一点。
On the other hand, it's just an extra for-loop. :)