我的实体看起来像这样:
{
name: "Max",
nicknames: [
"bestuser"
]
}
如何查询昵称以获取名字?
我创建了以下索引,
indexes:
- kind: users
properties:
- name: name
- name: nicknames
我使用node.js客户端库查询昵称
db.createQuery('default','users').filter('nicknames', '=', 'bestuser')
响应只是一个空数组。
有办法吗?
答案 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')