我正在与谷歌应用引擎上的NodeJS与数据存储数据库。
我正在使用复合查询过滤器,只需要一个基本的"或"条件。
示例:已完成= false或优先级= 4的查询任务
const query = datastore.createQuery('Task')
.filter('done', '=', false) //How to make this an OR condition?
.filter('priority', '=', 4);
但是,根据文件:
云数据存储当前仅本机支持使用AND运算符组合筛选器。
有什么好方法可以实现基本的OR条件,而不必运行两个完全独立的查询,然后再组合结果?
- 更新**
我有我的solution described in detail here in my other post。由于我还在学习NodeJS,任何对解决方案改进的反馈都将受到感谢。
2条答案
按热度按时间f4t66c6m1#
目前无法实现带有
OR
条件的查询-这就是您引用的注解的意思。OR
的操作提供了一些(有限的)支持。从查询限制:索引查询机制的性质对查询的功能施加了某些限制。云数据存储查询不支持子字符串匹配、不区分大小写的匹配或所谓的全文搜索。
NOT
、OR
和!=
运算符本身不受支持,但一些客户端库可能会在云数据存储之上添加支持。但是AFAIK没有这样的库可用于NodeJS。
如果您只需要几个特定的此类查询,一种可能的方法是(在编写实体时)使用此类查询所需的结果计算附加属性,并对该属性使用等式查询。
例如,假设您希望查询使用
OR
-ing这些过滤器的等效项:.filter('status', '=', 'queued')
.filter('status', '=', 'running')
你可以在每次
status
改变时计算一个类似not_done
的属性,如果status
是queued
或running
,则将其设置为true
,否则设置为false
,然后你可以使用具有相同语义的.filter('not_done', '=', true)
。当然,这并不方便,但它可以帮助你克服障碍。w1jd8yoj2#
我回答了您的另一个问题,即在Cloud Datastore上使用Array属性来解决一些使用
OR
操作符会有所帮助的情况:https://stackoverflow.com/a/74958631/963901