Ashish Anand Ashish Anand - 3 months ago 13
Node.js Question

Multiple select in google datastore query throwing ApiError: Precondition Failed error in node

I'm using following query to retrieve some entities from google Datastore:



var query = datastore.createQuery(namespace,tableName);
query.select(['displayName','username']);
datastore.getEntitySet(query,function(err,data){
if(err){
res.status(500).end();
}
else{
res.send(data);
}
});





The above code works fine if I select only one property i.e.



query.select('username');





But with multiple select its throwing 412 'Precondition Failed' error. my entity looks like the following:
Entity properties

Answer

You need to create a multi-property index in order to use multi-property queries.

Because you are not using App Engine, these indexes need to be manually created.

I have a tutorial here that covers this.

Here are the steps:

  1. Install Java 7 Runtime (or later version) http://java.com/
    • I recommend using Cloud Shell which has Java already installed and configured
  2. Create a folder called WEB-INF
  3. Inside that folder, you need three files:
  4. In the datastore-indexes.xml file, you need to define your multi-property indexes. Follow the documentation.
  5. Install the gcd tool
  6. Finally, run the gcd tool (one directory above the WEB-INF folder)
    • Linux/Mac path/to/gcd.sh updateindexes --auth_mode=oauth2 .
    • Windows path/to/gcd.cmd updateindexes --auth_mode=oauth2 .

After a few minutes, your indexes should be created.

Comments