数组中的Google Cloud Datastore查询值

时间:2018-07-21 22:06:48

标签: google-cloud-platform google-cloud-datastore

我的实体看起来像这样:

{
  name: "Max",
  nicknames: [
   "bestuser"
 ]
}

如何查询昵称以获取名字?

我创建了以下索引,

indexes:

- kind: users
  properties:
  - name: name
  - name: nicknames

我使用node.js客户端库查询昵称

db.createQuery('default','users').filter('nicknames', '=', 'bestuser')

响应只是一个空数组。

有办法吗?

4 个答案:

答案 0 :(得分:2)

您实际上需要从数据存储区中获取查询,而不仅仅是创建查询。我不熟悉nodejs库,但这是Google Cloud网站上给出的代码:

datastore.runQuery(query).then(results => {
  // Task entities found.
  const tasks = results[0];

  console.log('Tasks:');
  tasks.forEach(task => console.log(task));
});

查询所在的地方

const query = db.createQuery('default','users').filter('nicknames', '=', 'bestuser')

查看https://cloud.google.com/datastore/docs/concepts/queries#datastore-datastore-run-query-nodejs上的文档

答案 1 :(得分:1)

首先要注意的是,您无需为这种搜索创建索引。没有不平等,没有命令,没有预测,所以这是不必要的。

正如Reuben所说,您已经创建了查询,但是没有运行它。

ds.runQuery(query, (err, entities, info) => {
                if (err) {
                    reject(err);
                } else {
                    response.resultStatus = info.moreResults;
                    response.cursor = info.moreResults == TNoMoreResults? null: info.endCursor;
                    resolve(entities);
                };
            });

在我的情况下,response结构是用来在游标上收集信息的(如果数据量超出了我的查询范围,因为我使用limit限制了查询大小),但是您不需要resolve(entities)

答案 2 :(得分:0)

我将整个plob读取为字符串,以获取二进制文件here的字节。我想您只是根据您的要求解析Json

答案 3 :(得分:0)

如果使用默认名称空间,则需要从查询中将其删除。您的查询必须像这样:

const query = db.createQuery('users').filter('nicknames', '=', 'bestuser')