【问题标题】:Google Datastore filter with OR condition带有 OR 条件的 Google Datastore 过滤器
【发布时间】:2017-11-21 19:14:27
【问题描述】:

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

我正在使用复合查询过滤器,只需要一个基本的“OR”条件。

示例:已完成的查询任务 = 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,因此我们将不胜感激任何有关改进解决方案的反馈。

【问题讨论】:

  • 我有同样的情况。你找到解决这个问题的方法了吗?
  • 我在另一篇文章中详细描述了我的解决方案。任何对解决方案改进的反馈将不胜感激(我仍在学习 NodeJS)stackoverflow.com/a/47539300/2183592 如果对您有帮助,请点赞,谢谢!

标签: node.js google-app-engine google-cloud-datastore


【解决方案1】:

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

一些客户端库为OR-like 操作提供一些(有限的)支持。来自Restrictions on queries

索引查询机制的性质施加了一定的限制 关于查询可以做什么。 Cloud Datastore 查询不支持 子字符串匹配、不区分大小写的匹配或所谓的全文 搜索。 NOTOR!= 运算符不是原生的 支持,但某些客户端库可能会在 Cloud 之上添加支持 数据存储。

但是 AFAIK 没有适用于 NodeJS 的此类库。

如果您只需要一些特定的此类查询,一种可能的方法是计算(在编写实体时)具有此类查询所需结果的附加属性,并在该属性上使用相等查询。

例如,假设您想要一个带有OR 的查询,这些过滤器的等效项:

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

如果statusqueuedrunningfalse,则每次status 更改时,您都可以计算类似not_done 的属性并将其设置为true。然后您可以使用具有相同语义的.filter('not_done', '=', true)。诚然,这并不方便,但它可能会让你越过障碍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2013-07-11
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多