Azure cosmosdb 文档计数查询忽略分区键

Azure cosmosdb 文档计数查询忽略分区键,azure-cosmosdb,Azure Cosmosdb,我希望获得所选分区中所有文档的计数。但是,以下代码将返回集合中所有文档的计数,成本为0 RU var collectionLink = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId); string command = "SELECT VALUE COUNT(1) FROM Collection c"; FeedOptions feedOptions = new FeedOptions(

我希望获得所选分区中所有文档的计数。但是,以下代码将返回集合中所有文档的计数,成本为0 RU

    var collectionLink = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);

    string command = "SELECT VALUE COUNT(1) FROM Collection c";

    FeedOptions feedOptions = new FeedOptions()
    {
        PartitionKey = new PartitionKey(BuildPartitionKey(contextName, domainName)),
        EnableCrossPartitionQuery = false
    };

    var count = client.CreateDocumentQuery<int>(collectionLink, command, feedOptions)
        .ToList()
        .First();
var collectionLink=UriFactory.CreateDocumentCollectionUri(数据库ID,collectionId);
string command=“从集合c中选择值计数(1)”;
FeedOptions FeedOptions=新的FeedOptions()
{
PartitionKey=new PartitionKey(BuildPartitionKey(contextName,domainName)),
EnableCrossPartitionQuery=false
};
var count=client.CreateDocumentQuery(collectionLink、命令、feedOptions)
托利斯先生()
.First();
在查询中添加一个
WHERE c.partition='blah'
子句将起作用,但需要花费3.71 RUs,集合中有11个文档

为什么上面的代码片段会返回整个集合的计数,并且有更好的解决方案来获取所选分区中所有文档的计数

如果查询包含针对分区键的筛选器,如SELECT *从c,其中c.city=“西雅图”,它被路由到单个分区。如果查询在分区键上没有筛选器,则为 在所有分区中执行,结果合并到客户端

当我们向Azure Cosmos DB发出查询时,您可以从这位官员那里检查SDK执行的逻辑步骤

如果查询是类似聚合的计数,则来自单个 分区被求和以产生总计数

因此,当您仅使用集合c中的
选择值计数(1)时,它将在所有分区中执行,并将结果合并到客户端

如果要获得所选分区中所有文档的计数,只需添加
其中c.partition='XX'
过滤器


希望它能帮助您。

我认为这实际上是一个bug,因为我在查询和
FeedOptions中设置的分区键都有相同的问题

这里报告了一个类似的问题:


微软的回应听起来像是针对x64的SDK问题。

因此,对于所有聚合查询,提要选项中的
启用CrossPartitionQuery
分区键
属性都被忽略了?@Du-z我想这是关于是否有查询筛选器的问题。谢谢您的解释。这是有史以来最糟糕的数据库引擎。像这样的事情使它毫无价值。我只是花了一个小时试图弄清楚为什么我的分页不起作用,结果发现分区键被忽略了。