我有这个带有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查询此集合?
答案 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.CreateDocumentQuery
或sqlExpression
只能由数字和字母组成,第一个必须是一个字母。经过我的测试,我认为到目前为止你无法达到这个目的。我会报告此问题,您可以添加反馈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();
谢谢!