【发布时间】:2014-10-27 12:43:52
【问题描述】:
我有一个员工集合,我想检索 10 位员工的完整文档,我想将他们的 ID 发送到我的 SQL SELECT。我该怎么做?
为了进一步澄清,我有 10 个 EmployeeId,我想从我的员工集合中提取这些员工的信息。非常感谢您的帮助。
【问题讨论】:
标签: azure azure-cosmosdb document-database nosql
我有一个员工集合,我想检索 10 位员工的完整文档,我想将他们的 ID 发送到我的 SQL SELECT。我该怎么做?
为了进一步澄清,我有 10 个 EmployeeId,我想从我的员工集合中提取这些员工的信息。非常感谢您的帮助。
【问题讨论】:
标签: azure azure-cosmosdb document-database nosql
【讨论】:
今天最好的方法是创建一个 Contains() UDF,它接收要搜索的 id 数组并在 WHERE 子句中使用它。
【讨论】:
更新:
截至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”关键字。
【讨论】:
您也可以通过使用 OR 支持来实现此目的。下面是一个示例——
SELECT *
FROM Employees e
WHERE e.EmployeeId = 1 OR e.EmployeeId = 2 OR e.EmployeeId = 3
如果您需要的 OR 数量超过 DocumentDB 的上限,则必须通过employeeId 值将查询分解为多个较小的查询。您还可以从客户端并行发出查询并收集所有结果
【讨论】: