【问题标题】:How to search arrays for values in Google Cloud Datastore如何在数组中搜索 Google Cloud Datastore 中的值
【发布时间】:2017-03-07 15:31:24
【问题描述】:

假设我们在 Google Cloud Datastore 中有一个实体 - “Job”,它有一些访问控制标签:

["admin", "manager"]

我们有一个用户有一些访问控制标签

["admin", "super_user"] 

我们想撤回该用户有权访问的所有作业;例如在 SQL 中类似

SELECT * from Job where tags INCLUDE "admin" OR tags INCLUDE "super_user"

不支持 OR 查询,还有其他方法可以实现吗?

【问题讨论】:

  • GCS 中的实体?那是什么查询语法?
  • Google Cloud Datastore 抱歉
  • select * from Job where tags = 'admin' or tags = 'super_user'
  • 谷歌云数据存储不支持 OR 运算符..

标签: google-app-engine google-cloud-datastore


【解决方案1】:

为此,您需要将数据以数组格式存储在谷歌云数据存储中。在这里我们不能使用 OR 条件。所以你可以使用 > 和

【讨论】:

    【解决方案2】:

    您可以查询以检索多个值,如下所示:

    如果您有多个数据存储 ID 的数组,如下所示:

    [1,2,3,4]
    

    可以使用 gstore-node 包查询

    var userData = await UserModel.get([1,2,3,4]);
    

    希望这会对你有所帮助。

    谢谢

    【讨论】:

      【解决方案3】:

      您能否使用 ndb.OR 查询数据存储模型?类似this example:

      query = Article.query(ndb.AND(Article.tags == 'python',
                                ndb.OR(Article.tags.IN(['ruby', 'jruby']),
                                       ndb.AND(Article.tags == 'php',
                                               Article.tags != 'perl'))))
      

      【讨论】:

      • 我在 AppEngine 版本的 Datastore 文档中看到了对此的支持,但在 Google Cloud Datastore/google-cloud-* API 中没有看到。想知道是什么原因。是不是 AppEngine 版本的 API 对 OR 条件运行多个查询?
      • 不幸的是,我们没有使用 python 库——我也怀疑这个 ndb.OR 操作正在执行应用程序级别的查询,因为 Datastore 本身不支持 OR-ing。
      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 2020-10-03
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 2016-07-24
      • 2021-10-31
      相关资源
      最近更新 更多