我正在使用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。
答案 0 :(得分:2)
目前无法实现OR
条件的查询 - 这就是您引用的注释的含义。
某些客户端库为OR
提供了一些(有限的)支持 - 就像操作一样。来自Restrictions on queries:
索引查询机制的性质强加了某些限制 关于查询可以做什么。 Cloud Datastore查询不支持 子字符串匹配,不区分大小写的匹配或所谓的全文 搜索。
NOT
,OR
和!=
运算符不是本机运算符 支持,但一些客户端库可能会在Cloud之上添加支持 数据存储。
但是AFAIK没有这样的库可用于NodeJS。
如果您只需要一些特定的此类查询,一种可能的方法是计算(在编写实体时)具有此类查询所需结果的附加属性,并在该属性上使用相等查询。
例如,假设您希望使用OR
查询这些过滤器的等效项:
.filter('status', '=', 'queued')
.filter('status', '=', 'running')
如果not_done
为status
或true
,您可以在每次status
更改时计算queued
这样的属性,并将其设置为running
否则false
。然后你可以使用具有相同语义的.filter('not_done', '=', true)
。当然,这不方便,但可能会让你超越障碍。