谷歌数据存储查询抛出多个selectApiError:Precondition节点失败的错误

我正在使用以下查询从谷歌数据存储检索一些实体:

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); } }); 

上面的代码工作正常,如果我只select一个属性即

 query.select('username'); 

但多select其投掷412'先决条件失败'的错误。 我的实体如下所示: 实体属性

您需要创build一个多属性索引才能使用多属性查询。

由于您没有使用App Engine,因此需要手动创build这些索引。

这里有一个教程。

这里是步骤:

  1. 安装Java 7 Runtime(或更高版本) http://java.com/
    • 我build议使用已经安装和configuration了Java的Cloud Shell
  2. 创build一个名为WEB-INF的文件夹
  3. 在那个文件夹里面,你需要三个文件:
    • appengine-web.xml (将YOUR_PROJECT_ID_HEREreplace为您的项目ID)
    • web.xml中
    • datastore-indexes.xml (删除我用于示例的索引)
  4. 在datastore-indexes.xml文件中,您需要定义多属性索引。 按照文档 。
  5. 安装gcd工具
  6. 最后,运行gcd工具(WEB-INF文件夹上的一个目录)
    • Linux / Mac path/to/gcd.sh updateindexes --auth_mode=oauth2 .
    • Windows path/to/gcd.cmd updateindexes --auth_mode=oauth2 .

几分钟后,您的索引应该被创build。