【问题标题】:SELECT with multiple values in DocumentDB在 DocumentDB 中选择多个值
【发布时间】:2014-10-27 12:43:52
【问题描述】:

我有一个员工集合,我想检索 10 位员工的完整文档,我想将他们的 ID 发送到我的 SQL SELECT。我该怎么做?

为了进一步澄清,我有 10 个 EmployeeId,我想从我的员工集合中提取这些员工的信息。非常感谢您的帮助。

【问题讨论】:

    标签: azure azure-cosmosdb document-database nosql


    【解决方案1】:

     Select * from Employees where EmployeeId in (1,3,5,6,...) 
    

    不工作?

    感谢ryancrawcour,我们知道它没有

    【讨论】:

    • 目前 DocumentDB 不支持 IN。
    • 谢谢。更新了答案
    【解决方案2】:

    今天最好的方法是创建一个 Contains() UDF,它接收要搜索的 id 数组并在 WHERE 子句中使用它。

    【讨论】:

      【解决方案3】:

      更新:

      截至5/6/2015,DocumentDB 支持IN 关键字;最多支持 100 个参数。

      例子:

      SELECT * 
      FROM Employees
      WHERE Employees.id IN (
          "01236", "01237", "01263", "06152", "21224",
          "21225", "21226", "21227", "21505", "22903",
          "14003", "14004", "14005", "14006", "14007"
      )
      

      原答案:

      补充 Ryan 的答案...这是一个示例:

      创建以下 UDF:

      var containsUdf = {
          id: "contains",
          body: function(arr, obj) {
              if (arr.indexOf(obj) > -1) {
                  return true;
              }
              return false;
          }
      };
      

      使用你的 contains UDF 是一个 SQL 查询:

      SELECT * FROM Employees e WHERE contains(["1","2","3","4","5"], e.id)
      

      有关创建 UDF 的文档,请查看 DocumentDB SQL reference

      您也可以在DocumentDB Feedback Forums 投票支持为“WHERE”子句实施“IN”关键字。

      【讨论】:

      • 只是关于 UDF 的注释,它们会强制扫描。因此,根据您的使用情况以及“包含数组”的大小,执行单个查询实际上可能更有效。特别是在如上所述处理 id 时。 SELECT * FROM Employees e WHERE CONTAINS("1", "2", "3"), e.id) 实际上可能是锥体,因为 WHERE e.id = '1' 等的 3 个单独的点读取。
      【解决方案4】:

      您也可以通过使用 OR 支持来实现此目的。下面是一个示例——

      SELECT * 
      FROM Employees e
      WHERE e.EmployeeId = 1 OR e.EmployeeId = 2 OR e.EmployeeId = 3
      

      如果您需要的 OR 数量超过 DocumentDB 的上限,则必须通过employeeId 值将查询分解为多个较小的查询。您还可以从客户端并行发出查询并收集所有结果

      【讨论】:

      • 使用 OR 避免了全表扫描,并且比通过 UDF 过滤要快得多!请注意,对于预览版,查询仅限于 3 个 OR 语句。
      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多