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

6tqwzwtp  于 2023-01-01  发布在  Node.js
关注(0)|答案(2)|浏览(103)

我正在与谷歌应用引擎上的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,任何对解决方案改进的反馈都将受到感谢。

f4t66c6m

f4t66c6m1#

目前无法实现带有OR条件的查询-这就是您引用的注解的意思。

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

索引查询机制的性质对查询的功能施加了某些限制。云数据存储查询不支持子字符串匹配、不区分大小写的匹配或所谓的全文搜索。NOTOR!=运算符本身不受支持,但一些客户端库可能会在云数据存储之上添加支持。
但是AFAIK没有这样的库可用于NodeJS。
如果您只需要几个特定的此类查询,一种可能的方法是(在编写实体时)使用此类查询所需的结果计算附加属性,并对该属性使用等式查询。
例如,假设您希望查询使用OR-ing这些过滤器的等效项:

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

你可以在每次status改变时计算一个类似not_done的属性,如果statusqueuedrunning,则将其设置为true,否则设置为false,然后你可以使用具有相同语义的.filter('not_done', '=', true)。当然,这并不方便,但它可以帮助你克服障碍。

w1jd8yoj

w1jd8yoj2#

我回答了您的另一个问题,即在Cloud Datastore上使用Array属性来解决一些使用OR操作符会有所帮助的情况:https://stackoverflow.com/a/74958631/963901

相关问题