带有OR条件的Google数据存储filter

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

我正在使用复合查询filter,只需要一个基本的“或”条件。

示例:具有Done = false或优先级= 4的查询任务

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

但是,根据文件 :

云数据存储目前仅本地支持使用AND运算符组合filter。

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

UPDATE

我在我的另一篇文章中详细介绍了我的解决scheme 。 任何反馈的改进解决scheme将不胜感激,因为我还在学习NodeJS。

当前不可能实现带有OR条件的查询 – 这是您引用的注释的含义。

某些客户端库为类似OR的操作提供了一些(有限的)支持。 来自查询的限制 :

索引查询机制的性质对查询的function有一定的限制。 云数据存储查询不支持子string匹配,不区分大小写的匹配或所谓的全文search。 NOTOR!=运算符不是本机支持的,但有些客户端库可能会在云数据存储上添加支持。

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

如果你只需要一些特定的查询,一个可能的方法就是计算(在编写实体的时候)一个额外的属性,这个查询需要的结果,并使用该属性上的相等查询。

例如,假设您希望使用OR查询这些filter的等价物:

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

每当status发生变化时,您可以计算一个像not_done这样的属性,如果statusqueuedrunning status ,则将其设置为true否则为false 。 然后你可以使用.filter('not_done', '=', true) ,它们具有相同的语义。 当然,这不方便,但它可能会让你过去的障碍。