带有OR条件的Google数据存储区过滤器

时间:2017-11-21 19:14:28

标签: node.js google-app-engine google-cloud-datastore

我正在使用Datastore数据库在Google App Engine上使用NodeJS。

我正在使用复合查询过滤器,只需要一个基本的" OR"条件。

示例:具有Done = false或优先级= 4

的查询任务
const query = datastore.createQuery('Task')
  .filter('done', '=', false) //How to make this an OR condition?
  .filter('priority', '=', 4);

然而,根据the documentation

  

Cloud Datastore目前仅支持组合过滤器   与AND运算符。

在不运行两个完全独立的查询然后组合结果的情况下,实现基本OR条件的好方法是什么?

更新

我有solution described in detail here in my other post。任何改进解决方案的反馈都会受到赞赏,因为我还在学习NodeJS。

1 个答案:

答案 0 :(得分:2)

目前无法实现OR条件的查询 - 这就是您引用的注释的含义。

某些客户端库为OR提供了一些(有限的)支持 - 就像操作一样。来自Restrictions on queries

  

索引查询机制的性质强加了某些限制   关于查询可以做什么。 Cloud Datastore查询不支持   子字符串匹配,不区分大小写的匹配或所谓的全文   搜索。 NOTOR!=运算符不是本机运算符   支持,但一些客户端库可能会在Cloud之上添加支持   数据存储。

但是AFAIK没有这样的库可用于NodeJS。

如果您只需要一些特定的此类查询,一种可能的方法是计算(在编写实体时)具有此类查询所需结果的附加属性,并在该属性上使用相等查询。

例如,假设您希望使用OR查询这些过滤器的等效项:

  • .filter('status', '=', 'queued')
  • .filter('status', '=', 'running')

如果not_donestatustrue,您可以在每次status更改时计算queued这样的属性,并将其设置为running否则false。然后你可以使用具有相同语义的.filter('not_done', '=', true)。当然,这不方便,但可能会让你超越障碍。