CosmosDb c#SDK的工作方式与Rest Api的工作方式不同

CosmosDb c#SDK的工作方式与Rest Api的工作方式不同,c#,azure,azure-cosmosdb,C#,Azure,Azure Cosmosdb,我正在将CosmosDb Sdk与nugetMicrosoft.Azure.DocumentDB.Core 2.1.0和.NetStandard 2.0一起使用 我正在使用此查询获取文档 var client client = new DocumentClient(new Uri(config.CosmosDbEndPointUrl), config.CosmosDbPrimaryKey); var partitionKey = "siteId"; // the partition key is

我正在将CosmosDb Sdk与nuget
Microsoft.Azure.DocumentDB.Core 2.1.0
.NetStandard 2.0
一起使用

我正在使用此查询获取文档

var client client = new DocumentClient(new Uri(config.CosmosDbEndPointUrl), config.CosmosDbPrimaryKey);
var partitionKey = "siteId"; // the partition key is defined as /siteId, I tried both, still not working
var queryOptions = new FeedOptions
{
  MaxItemCount = 500,
  EnableCrossPartitionQuery = true,
  PartitionKey = new PartitionKey(partitionKey)
};

var auditQuery = client
    .CreateDocumentQuery<AuditDTO>(
     UriFactory.CreateDocumentCollectionUri(_databaseName, _collectionName), queryOptions)
        .Where(f => f.Status == AuditStatus.Pending)
        .AsDocumentQuery();

var results = new List<AuditDTO>();
while (auditQuery.HasMoreResults)
{
  var audits = await auditQuery.ExecuteNextAsync<AuditDTO>();
  results.AddRange(audits);
}
使用RESTAPI会像我期望的那样返回1个文档

我试图反序列化对AuditDTO类的响应,它是有效的,因此,我的模型没有问题

我不明白为什么RESTAPI工作,而不是.NETSDK

没有授权异常,没有错误消息。我刚得到0个文档

我错过了什么

var partitionKey = "siteId";
var queryOptions = new FeedOptions
{
  MaxItemCount = 500,
  EnableCrossPartitionQuery = true,
  PartitionKey = new PartitionKey(partitionKey)
};
您的问题出在分区键上。 分区键应该是分区键的值,而不是定义

这意味着
FeedOptions
上的
partitionKey
值应该是这样的
59c49da3-b398-4db7-aff4-d2129353e3a8
(假设它是一个guid),而不是这个
siteId

正确的FeedOptions对象如下所示:

var partitionKey = "59c49da3-b398-4db7-aff4-d2129353e3a8";
var queryOptions = new FeedOptions
{
  MaxItemCount = 500,
  EnableCrossPartitionQuery = true,
  PartitionKey = new PartitionKey(partitionKey)
};

这些文件确实有误导性

要使跨分区查询能够查询所有分区,只需将
enableCrospartitionQuery
设置为true即可

var queryOptions = new FeedOptions
{
  MaxItemCount = 500,
  EnableCrossPartitionQuery = true
};
正如Nick Chapsas所说,如果需要搜索特定分区,请将
PartitionKey
属性设置为要搜索的分区的值

这是我在Azure GitHub上找到的

var queryOptions = new FeedOptions
{
  MaxItemCount = 500,
  EnableCrossPartitionQuery = true
};