4

I store comment entity in Datastore and I use Datastore Viewer to see stored data.

I can do following queries

select * from comment    
select __key__ from comment
select Subject from comment
select Comment from comment

But I can't query

select Subject, Comment from comment
// Error: The suggested index for this query is:
//    - kind: comment
//      properties:
//      - name: Comment
//      - name: Subject
select __key__, Subject, Comment from comment
// Error: projections are not supported for the property: __key__

I can't find any reference why it is wrong. These errors does not tell me much.

I have not set any key or index for these entities.

Documentation tells following:

SELECT [DISTINCT] [* | <property list> | __key__]
  [FROM <kind>]
  [WHERE <condition> [AND <condition> ...]]
  [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
  [LIMIT [<offset>,]<count>]
  [OFFSET <offset>]

  <property list> := <property> [, <property> ...]
  <condition> := <property> {< | <= | > | >= | = | != } <value>
  <condition> := <property> IN <list>
  <condition> := ANCESTOR IS <entity or key>
  <list> := (<value> [, <value> ...]])

Subject, Comment - is property list and it valid query. But it is not. I created entity from Go code.

Andrew
  • 1,095
  • 1
  • 8
  • 13

1 Answers1

3

The projection queries come with some limitations. In the projection-doc is mentioned that "Only indexed properties can be projected".

The first error message shows exactly that the combined index of Subject, Comment doesn't exist yet. You can create the index manually by adding

- kind: comment
  properties:
  - name: Comment
  - name: Subject

to your index.yaml in your project root folder. Please have a look at the index spec and projection-doc.

// Error: projections are not supported for the property: __key__

Entity keys are returned by the GetAll method. Don't put them in your projection.

keys, err := q.GetAll(c, &people)

I can't post more than 2 links yet, so please look for more details in the datastore reference.

alpe1
  • 350
  • 1
  • 9