从CosmosDB中读取集合中所有分区的文档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从CosmosDB中读取集合中所有分区的文档相关的知识,希望对你有一定的参考价值。
使用电子邮件作为分区键在Cosmos DB中创建了一个集合,并在该集合中添加了大约十个文档。
当我在Partition Key
中使用RequestOptions
查询集合时,返回所有具有提供的分区键的文档。
var result = await documentRUClient.ExecuteStoredProcedureAsync<string>
(UriFactory.CreateStoredProcedureUri(DataBaseId, CollectionId,
"GetCollection"), new RequestOptions { PartitionKey =
new PartitionKey("test @test.com") });
存储过程:
function GetCollection() {
var context = getContext();
var collectionManager = context.getCollection();
var collectionLink = collectionManager.getSelfLink();
var query = "SELECT * FROM c";
collectionManager.queryDocuments(collectionLink, query, function(err, documents){
context.getResponse().setBody(documents);
});
}
现在我需要从该集合中的所有分区获取所有文档。我已经尝试了下面的代码,但是它给出了错误,必须为此操作提供PartitionKey值。
var result = await documentRUClient.ExecuteStoredProcedureAsync<string>
(UriFactory.CreateStoredProcedureUri(DataBaseId, CollectionId,
"GetCollection"));
请建议一种方法来实现这一目标。
答案
这是Cosmos中存储过程的限制。它只能在分区内执行。
以下是MSDN的摘录
如果注册存储过程的集合是单分区集合,则事务的范围限定为集合中的所有文档。如果集合是分区的,则存储过程在单个分区键的事务范围内执行。
您必须使用CreateDocumentQuery并在FeedOptions中将EnableCrossPartitionQuery设置为true才能获取集合中的所有文档。
以上是关于从CosmosDB中读取集合中所有分区的文档的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 Azure 门户从 CosmosDB 容器中清除所有文档?
MongoDB:如何使用 expressjs 从所有集合中读取所有文档?