目前我正在使用 client.CreateDocumentQuery<...>(...).Where(...).Count()
但我担心这会导致 DocumentDB 通过 Internet 传输所有选定的文档,之后我的应用程序会在客户端对它们进行计数。
客户端对象下是否有不同的查询方法来确保 DocumentDB 执行计数并仅返回最终结果?
或者我正在使用的方法是否已经以这种方式进行了优化? (即 IOrderedQueryable
)
或者我是否需要编写一个存储过程,以便在服务器端进行处理?如果是这样,您如何在 JavaScript 中引用项目数?
最佳答案
要减少从 DocumentDB 发回的数据量,您可以将 LINQ 查询更改为 .Select(f => 1).AsEnumerable().Count()。这将被翻译成一个“SELECT VALUE 1 FROM ...”查询,它只会为每个匹配的结果发送一个“1”。
另一个可以加快速度的更改是通过设置 FeedOptions.MaxItemCount = -1(最大值)来更改 MaxItemCount。所以像
client.CreateDocumentQuery<..>(
collectionLink,
new FeedOptions { MaxItemCount = -1 })
.Where(..)
.Select(f => 1)
.AsEnumerable()
.Count()
另一种方法是使用存储过程来执行计数 - 您可以使用现有的库,如 DocumentDB Lumenize:https://github.com/lmaccherone/documentdb-lumenize
每种方法的优缺点 - 如果您的收集存在吞吐量瓶颈,前者更好,而后者对于延迟来说更好,因为您只需发回计数而不是发回 1 并将它们加到客户端。
关于c# - 在 DocumentDB 中查询满足特定条件的文档计数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311228/