0

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

为什么这样的计划查询:SELECT A FROM kind WHERE A = 1 not supported?

4

2 回答 2

4

因为没有意义。你在问

SELECT A FROM kind WHERE A = 1

所以,给我A在哪里A = 1。嗯,你已经知道了A = 1。DB允许这样做是没有意义的。

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

于 2013-03-30T09:03:01.330 回答
0

这背后的原因可能是,由于您已经拥有要查询的属性的值,因此不需要查询返回它们。从长远来看,这可能是一件好事,但老实说,这是 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. :)

于 2013-05-23T23:31:45.107 回答