--这是上下文:
我有一个GCP函数,它必须转到Datastore来获取一些数据,以便将数组返回给客户端。
问题:
当我对代码使用日期时间过滤器时,我无法实现GCP函数返回数据,但是,当我将等效的查询放在GCP Datastore查询控制台上时,我可以实现回滚许多行。
技术数据:
Datastore GQL:
select * from KIND where recordDate >= DATETIME ("2018-10-10T10:10:00.000000+03:00") and recordDate <= DATETIME ("2018-10-11T10:10:00.999999+03:00")(它工作在GCP数据存储控制台上)
GCP功能代码:
query = datastore.createQuery(kind).filter('recordDate','>=',dateFrom).filter('recordDate','<=',dateTo);
console.log(query);
datastore.runQuery(query, (err,entities) => {
console.log(err);
console.log(entities);
});(runQuery().总是将null作为err变量返回,并在实体变量上返回一个void )
我需要的帮助:
有人能告诉我一个使用Datetime过滤器返回实体的查询成功的例子吗?
我尝试使用dateFrom和dateTo vars格式的方法:
没有人工作:
更新(2018-11-19):
在执行runQuery之前,我打印了这个查询,得到以下结果:(我将一些点放置到安全的合理数据中)
{
"textPayload": "Query {\n scope: \n Datastore {\n clients_: Map {},\n datastore: [Circular],\n namespace: undefined,\n projectId: '................',\n defaultBaseUrl_: 'datastore.googleapis.com',\n baseUrl_: 'datastore.googleapis.com',\n options: \n { libName: 'gccl',\n libVersion: '2.0.0',\n scopes: [Array],\n servicePath: 'datastore.googleapis.com',\n port: 443,\n projectId: 'c..........' },\n auth: \n GoogleAuth {\n checkIsGCE: undefined,\n jsonContent: null,\n cachedCredential: null,\n _cachedProjectId: 'c..........',\n keyFilename: undefined,\n scopes: [Array] } },\n namespace: null,\n kinds: [ '....KIND......' ],\n filters: \n [ { name: 'recordDate', op: '>', val: 2018-10-10T00:00:00.000Z },\n { name: 'recordDate', op: '<', val: 2018-10-12T23:59:59.000Z } ],\n orders: [],\n groupByVal: [],\n selectVal: [],\n startVal: null,\n endVal: null,\n limitVal: 20,\n offsetVal: -1 }",
"insertId": "............................098...",
"resource": {
"type": "cloud_function",
"labels": {
"region": "us-central1",
"function_name": "...................-get-search",
"project_id": "............."
}
},
"timestamp": "2018-11-19T21:19:46.737Z",
"severity": "INFO",
"labels": {
"execution_id": "792s.....lp"
},
"logName": "projects/......./logs/cloudfunctions.googleapis.com%2Fcloud-functions",
"trace": "projects/........../traces/4a457.......",
"receiveTimestamp": "2018-11-19T21:19:52.852569373Z"
}“职能守则”是:
query = datastore.createQuery(kind).filter('recordDate','>',new Date(dateFrom)).filter('recordDate','<',new Date(dateTo)).limit(20);
console.log(query);
var test = datastore.runQuery(query, (err,entities) => {
console.log(err);
console.log(entities);
entities.forEach(entity => {
console.log(entity);
});
return{
entities:entities,
err:err
};
});
console.log(test);发布于 2018-11-06 17:56:02
当使用客户端库根据datetime属性筛选或排序查询结果时,您应该使用相应语言的本机日期时间表示形式,而不是字符串或GQL结构。
特别是对于您显然使用的node.js,您应该使用Date()对象。下面是来自对查询的限制的一个例子
.createQuery= datastore .createQuery('Task') .filter('created','>',新日期(‘1990-01-01T00:00:00Z’)) .filter('created','<',新日期(‘2000-12-31T23:59:59Z’);
https://stackoverflow.com/questions/53161156
复制相似问题