我试图使用数字字段作为分区键,但我无法在它们上运行存储过程。我不确定我是在做错事还是不可能。
我有两个集合,有两个不同的分区键。
来自集合1的示例文档
{
"id":"1",
"group": "a"
}
来自集合2的示例文档
{
"id":"1",
"group": 1
}
区别在于第二个集合中的组字段没有双引号。
这两个集合都将组作为分区键,我正在尝试执行Azure Portal for Cosmos DB中提供的示例存储过程。
虽然我能够成功运行第一个集合,但第二个集合会产生“找不到文档”的错误。
我从sql server数据库导入数据,导入的int字段没有双引号。我搜索了很多,但没有双引号找不到与数字分区键有关的文档。
是否可以从数字字段中执行分区键?任何帮助,因为这个字段最适合我的分区收集,并且非常有用。
请不要担心cosmos db存储过程中明确支持的数字分区键。你做的一切都是正确的。你遇到了意想不到的结果,因为azure portal将分区键输入识别为String
类型,即使你填充了Number
类型。
你可以用cosmos db sdk或rest api来测试它。例如,java sdk示例如下:
import com.microsoft.azure.documentdb.*;
public class ExecuteSPTest {
static private String YOUR_COSMOS_DB_ENDPOINT = "https://***.documents.azure.com:443/";
static private String YOUR_COSMOS_DB_MASTER_KEY = "***";
public static void main(String[] args) throws DocumentClientException {
DocumentClient client = new DocumentClient(
YOUR_COSMOS_DB_ENDPOINT,
YOUR_COSMOS_DB_MASTER_KEY,
new ConnectionPolicy(),
ConsistencyLevel.Session);
RequestOptions options = new RequestOptions();
PartitionKey partitionKey = new PartitionKey(1);
options.setPartitionKey(partitionKey);
StoredProcedureResponse queryResults = client.executeStoredProcedure(
"/dbs/db/colls/group/sprocs/sample",
options,
null);
String document = queryResults.getResponseAsString();
System.out.println(document);
}
}
输出: