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

时间:2017-01-10 12:12:40

标签: c# azure azure-cosmosdb

我有这个带有guid id的集合。当我使用Azure Query Explorer并在上面的组合框中选择了集合时,它没问题:

  VM
  Scheduler
  Web app/ web job
  Worker role/ Web role
  Batch

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

SELECT * FROM c

我明白了:

  

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

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

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

  

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

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

3 个答案:

答案 0 :(得分:2)

在DocumentDB中,查询的范围限定为单个集合(不是像关系数据库中的数据库)。在REST API中,查询是针对集合URI /dbs/<my-db>/colls/<my0coll>的{​​{1}}个请求。

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

答案 1 :(得分:2)

根据您的描述,我查看了有关DocumentDB SQL语法https://github.com/metasoarous/strange-coop/tree/master/etc的官方文档。以下是上述文档中的语法:

input_alias

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

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

<强>更新

对于C#的客户端libarary here,我们可以在调用var items = client.CreateDocumentQuery<GroupedSales>(UriFactory.CreateDocumentCollectionUri(DatabaseId, DocumentCollectionId)).Where( x => x.Date >= filter.From.Date && x.Date <= filter.To.Date ).ToList(); 时使用Microsoft Azure DocumentDB来捕获请求,而不指定Where参数,如下所示:

public class ApplicationUserStore : UserStore<ApplicationUser>
{

    public ApplicationUserStore()
        : base(new ApplicationUserDbContext())
    { }
}

public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(ApplicationUserStore store)
        : base(store)
    {
    }
}

注意:如果没有public class ApplicationUserInitializer : DropCreateDatabaseAlways<ApplicationUserDbContext> { protected override void Seed(ApplicationUserDbContext context) { using (var sotre = new ApplicationUserStore()) using (var manager = new ApplicationUserManager(sotre)) { manager.CreateAsync(new ApplicationUser { UserName = "myname" }, "P@ssword!"); } } } 子句,请求正文将为空。此时,查询等于“SELECT * FROM root”。

答案 2 :(得分:1)

Bruce 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();

谢谢!

相关问题