带有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。
NOT
,OR
和!=
运算符不是本机支持的,但有些客户端库可能会在云数据存储上添加支持。
但是AFAIK没有这样的库可用于NodeJS。
如果你只需要一些特定的查询,一个可能的方法就是计算(在编写实体的时候)一个额外的属性,这个查询需要的结果,并使用该属性上的相等查询。
例如,假设您希望使用OR
查询这些filter的等价物:
-
.filter('status', '=', 'queued')
-
.filter('status', '=', 'running')
每当status
发生变化时,您可以计算一个像not_done
这样的属性,如果status
为queued
或running
status
,则将其设置为true
否则为false
。 然后你可以使用.filter('not_done', '=', true)
,它们具有相同的语义。 当然,这不方便,但它可能会让你过去的障碍。