Skip to content

Returning key identifier as part of data returned by query #594

Description

@byrneciaran

I use the key identifier extensively throughout my app as my "id". The namespace and kind doesn't change. Is it possible to return the key identifier inline with the data returned from queries or should I just include the identifier as a property on the entity ?

For example, if you look at this simple example of an entity returned by a query:

[ { key: { namespace: 'mynamespace', path: [Object] },data: { name: 'My Entity'} }]

What I would like is for my data object to look like:

data:{id:XXXXX,name:'My Entity}

At the moment to include the key identifier with my data object I need to do something like:

var dao = entity.data
dao.id = entity.key.path.pop()

NOTE - I use pop() here since it's in the examples but I think it's a bad idea. Poping the identifier removes it from the path array. If I go on to reuse the key, it's incomplete (e.g. if I did a get and update). I think entity.key.path[entity.key.path.length - 1] is a better idea.

Anyway, if I am returning thousands of entities I can write (using async.js) something like:

 ds.runQuery(query, function(err,entities){
   async.map(entities,DAO,callback);
 });

function DAO(entity,callback) {
  var dao = entity.data;
  dao.id = entity.key.path.pop();
  callback(null, dao);
}

The problem I have is that (1) this is quite cumbersome (2) I haven't benchmarked but I'm sure there is a performance hit.

Is there a better way to do this ?

Activity

  1. jgeewax commented on May 13, 2015

    @jgeewax
    Contributor

    Some related issues:

    I think #574 would solve your issue.


    Regarding key.path.pop(): I can't find anything in the docs -- can you maybe open a separate issue to remove those examples? I think you're right that it's not the best way to get the Key name/id.

  2. added
    type: questionRequest for information or clarification. Not an issue.
    api: datastoreIssues related to the Datastore API.
    on May 13, 2015
  3. added this to the Datastore Future milestone on May 13, 2015
  4. byrneciaran commented on May 13, 2015

    @byrneciaran
    Author

    Thanks @jgeewax!

    My specific issue refers to retrieving entities. I actually think getting the id is ok when saving an entity as it's only one entity. The problem is that retrieving multiple entities requires something like map to populate the data object.

    This could be resolved by automatically populating the id or name property on the data object returned. This is similar to what happens in MongoDB whereby the _id is automatically set. If you want to exclude to exclude the id or name property you could do so through a projection, but by default it's included.

  5. jgeewax commented on May 13, 2015

    @jgeewax
    Contributor

    Gotcha, @byrneciaran

    Our worry (outlined in #508) is that key isn't a reserved word, so if someone had a property called key, we'd blast it out with the entity key... So we have to figure something out there... Feel free to add your use case over on that issue so we can make sure whatever we decide makes sense for everyone!

  6. 3 remaining items

  7. added a commit that references this issue on Feb 5, 2026
  8. added a commit that references this issue on Feb 23, 2026
  9. added a commit that references this issue on Mar 12, 2026
  10. added a commit that references this issue on Mar 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

api: datastoreIssues related to the Datastore API.type: questionRequest for information or clarification. Not an issue.

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions