javascriptnode.jsgoogle-app-enginegoogle-cloud-datastoregcloud-node

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


Solution

  • 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.