如何从带有guid id的集合中进行选择?

我有这个带有guid id的集合。 当我使用Azure Query Explorer并在上面的combobox中选择了集合时,它可以:

SELECT * FROM c 

但是当我尝试选择它时(来自查询exlorer和c#代码):

 SELECT * FROM 357fa002-dc7d-4ede-935a-6a0c80cf9239 c 

我明白了:

语法错误,无效数值标记’357fa002’。

我试过把它放在guid附近的引号(单引号和双引号)但没有成功..

Microsoft文档声明此集合ID不会破坏任何规则: https : //docs.microsoft.com/pl-pl/azure/documentdb/documentdb-create-collection

集合名称必须介于1到255个字符之间,并且不能包含/ \#? 或尾随空间

如何使用它的id查询此集合?

根据您的描述,我检查了有关DocumentDB SQL语法的FROM子句的官方文档。 以下是上述文档的语法:

 FROM   ::=  {[ JOIN ][,...n]}  ::=  [[AS] input_alias] | input_alias IN   ::= ROOT | collection_name | input_alias |  '.' property_name |  '[' "property_name" | array_index ']' 

对于 ,我们可以指定当前连接到的集合的名称。

根据您的情况,我试了一下并重现了这个问题。 此外,我已经测试了这个问题,发现input_aliascollection_name只能由数字和字母组成,第一个必须是一个字母。 经过我的测试,我认为到目前为止你无法达到这个目的。 我会报告此问题,您可以在此处添加您的反馈。

更新:

对于客户端库Microsoft Azure DocumentDB for C#,我们可以利用Fiddler在调用DocumentClient.CreateDocumentQuery时捕获请求,而不指定sqlExpression参数,如下所示:

 var items = client.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(DatabaseId, DocumentCollectionId)).Where( x => x.Date >= filter.From.Date && x.Date <= filter.To.Date ).ToList(); 

注意:如果没有Where子句,请求正文将为空。 此时,查询等于“SELECT * FROM root”。

在DocumentDB中,查询的范围限定为单个集合(不是关系数据库中的数据库)。 在REST API中,查询是针对集合URI /dbs//colls/ POST请求。

在Azure门户的查询资源管理器中,您必须在下拉列表中选择数据库/集合,然后进行查询。

布鲁斯MSFT解决了这个难题。 SELECT * FROM 357fa002-dc7d-4ede-935a-6a0c80cf9239 c可以像这样执行:

 var collectionId = "357fa002-dc7d-4ede-935a-6a0c80cf9239" var uri = UriFactory.CreateDocumentCollectionUri(DatabaseId, collectionId); var sql = string.Format("SELECT * FROM root c", attributeName); var elements = client.CreateDocumentQuery(uri, sql).ToList(); 

谢谢!