在DocumentDB中使用多个值进行SELECT

时间:2014-09-03 05:53:14

标签: azure azure-cosmosdb document-database nosql

我有一个Employees集合,我想要检索10个员工的完整文档,这些员工的ID我想发送到我的SQL SELECT。我该怎么做?

为了进一步澄清,我有10个EmployeeId,我想从Employees集合中提取这些员工的信息。我很感激你的帮助。

4 个答案:

答案 0 :(得分:5)

<强>更新

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;
    }
};

使用包含UDF是一个SQL查询:

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

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

您也可以投票赞成实施&#34; IN&#34; &#34; WHERE&#34;的关键字DocumentDB Feedback Forums上的条款。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

不行?

感谢ryancrawcour我们知道它没有