CosmosDB C#SQL无法重新调整结果

时间:2019-01-10 01:26:20

标签: azure-cosmosdb asp.net-core-2.1 azure-cosmosdb-sqlapi

我确定我错过了一些显而易见的事情。项目列表始终为空

.Net Core 2.1 Web应用程序

Microsoft.Azure.DocumentDB.Core 2.2.1

                var opts = new FeedOptions()
            {
                PartitionKey = new PartitionKey("/clientId"),  
                EnableCrossPartitionQuery = true,
                EnableScanInQuery = true,                       
            };
            string sql = "SELECT * FROM c "; 
            var items = client.CreateDocumentQuery(collectionLink: collectionLink.ToString(), sqlExpression: sql, feedOptions: opts).ToList();

            if (!items.Any())
            {

使用门户中的where子句,它可以按预期工作。 在门户中,我已经验证了该集合具有文档(当前有5个)。 该代码无一例外,因此我的数据库/集合名称正确,而collectionLink也是如此。

所以我尝试了在同一个数据库中处理1000个文档的不同集合-同样的事情,没有返回结果。

                var sql = "SELECT top 10 * FROM c";
            IQueryable<dynamic> query = client.CreateDocumentQuery<string>(collectionLink, new SqlQuerySpec(sql), opts);

            foreach (string alias in query)
            {
                Console.WriteLine(alias);
            }

我想念什么?

1 个答案:

答案 0 :(得分:1)

根据我的经验,您可能在此处设置了错误的分区键值。

PartitionKey = new PartitionKey("/clientId")

需要将分区键设置为字段值,而不是字段名称。

例如,我的文档如下:

{
    "id": "1",
    "name": "jay"
}

{
    "id": "2",
    "name": "jay2"
}

我的partitionkey“名字” ,所以这里有两个分区:'jay''jay1'

您应该将partitionkey属性设置为'jay'或'jay2',而不是'name'。