Tag: 蔚cosmosdb

尝试在DocumentDB中创建文档时获取“任务已取消”

当我尝试使用以下代码在我的DocumentDB数据库中创建文档时,代码挂起我调用CreateDocumentAsync()的地方,并最终给我“一个任务被取消”错误。 知道为什么吗? public static async Task CreateEmployee(Employee emp) { try { using (client = new DocumentClient(new Uri(endPointUrl), authorizationKey)) { //Get the database var database = await GetDatabaseAsync(); //Get the Document Collection var collection = await GetCollectionAsync(database.SelfLink, “Employees”); await client.CreateDocumentAsync(collection.SelfLink, emp); // Do something else with employee } } catch { // Handle error } return […]

没有Skip的C#对DocumentDB的分页

我想知道是否有任何方法可以使用或不使用他们的Linq提供程序在C#中对DocumentDB实现分页? 场景:我有一个支持分页的API,用户在页面中发送他们想要查看的pageSize,例如: public virtual async Task Get(int? page = DefaultPage, int? pageSize = DefaultPageSize) 然后,我使用这些参数使用以下代码对数据访问层中的数据进行分页: return query.Skip((pageNumber – 1) * pageSize).Take(pageSize); “那么问题是什么?”,你可能会问。 好吧,这种方法和代码在使用EF和SQL时非常有效。 问题是我想开始使用DocumentDB,但他们的Linq实现不支持Skip。 我见过的唯一例子包括使用TOP关键字或延续令牌 ,这与我不适合允许用户发送pageNumber和pageSize。 是否有任何实现仍然允许我的用户在请求中提供pageNumber和pageSize ?

DocumentDB TransientFaultHandling最佳实践

我一直在为受限制的DocumentDB客户端调用编写非常详细的重试逻辑。 以下示例是10次重试尝试的常见示例。 我的问题有两个方面:这是最好的做法,是否有一种不那么冗长的方式来处理这个问题? 我看到有一个Microsoft.Azure.Documents.Client.TransientFaultHandling nuget包应该用更少的代码实现相同的结果,但我在StackOverflow或Google上找不到任何示例,似乎没有任何明确的文档可用来自微软。 int maxRetryAttempts = 10; while (maxRetryAttempts > 0) { try { // Attempt to call DocumentDB Method // —[DocumentDB Method Here]— } catch (DocumentClientException de) { if (de.StatusCode.HasValue) { var statusCode = (int)de.StatusCode; if (statusCode == 429 || statusCode == 503) { //Sleep for retry amount Thread.Sleep(de.RetryAfter); //Decrement max retry […]

想了解异步

我已经使用了异步编码,但我并不完全理解如何使用它 – 尽管我理解这个概念以及为什么需要它。 这是我的设置: 我有一个Web API,我将从我的ASP.NET MVC应用程序调用,我的Web API将调用DocumentDB。 在代码示例中,我在向DocumentDB发送查询时看到了很多等待关键字。 如果我需要在我的MVC应用程序异步中使我的索引操作方法,我很困惑? 如果我的Web API中的CreateEmployee()方法应该是异步的,我也很困惑? 在这种情况下使用异步的正确方法是什么? 这是我的代码(这段代码目前给我错误,因为我的MVC动作方法不是异步)—- ASP.NET MVC应用程序代码—- public ActionResult Index() { Employee emp = new Employee(); emp.FirstName = “John”; emp.LastName = “Doe”; emp.Gender = “M”; emp.Ssn = “123-45-6789”; using (var client = new HttpClient()) { client.BaseAddress = new Uri(“http://myWebApi.com”); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); HttpResponseMessage response = await […]

从DocumentDb中删除特定文档

以下代码检索具有特定jobId的所有CrawlResult文档。 var result = (from c in documentDb.CreateDocumentQuery(collection.SelfLink) where c.JobId == jobId select c); 现在我想删除具有此特定jobId的所有文档。 删除我发现的文件的唯一方法是: documentDb.DeleteDocumentAsync(string documentLink) 但是如何让documentLink执行documentDb.DeleteDocumentAsync() ?

尝试更新MongoDb数组元素时出错

在我的Azure CosmosDb MongoApi中,我有一个带有嵌入文档数组的JSON。 { “_id”: ObjectId(“5a95745df886842904b82f71”), “token”: “value1”, “channel”: “value2”, “urls”: [ { “url”: “”, “interval”: “” }, { “url”: “” “interval”: “” } ] } 我想更新特定数组元素中的“interval”字段。 问题是当我使用这样或者这样的解决方案时,我最终会遇到exception: MongoDB.Driver.MongoCommandException: Command findAndModify failed: Invalid BSON field name ‘urls.$.interval’. 所以,我决定尝试在Mongo Shell中运行查询并得到同样的错误: { “nMatched”: 0, “nUpserted”: 0, “nModified”: 0, “writeError”: { “code”: 2, “errmsg”: “Invalid BSON field name […]

ComosDB – MongoAPI – 文档不包含分片键

我正在调查使用CosmosDB(以前的DocumentDB),我们目前使用MongoDB,因此我尝试使用MongoAPI for CosmosDB。 我在azure中创建了一个CosmosDB部署,创建了一个集合并指定了一个分区键“/ rateId”。 据我所知,从Microsofts文档中,这个分区键应该与我插入的每个文档中的属性相关,所以我试图插入一个基本文档,如下所示: { “rateId”: “test.1”, “val”: “test2” } 但是当我尝试插入它(通过Mongo C#驱动程序或通过MongoChef)时,我收到错误“文档不包含分片键”。 我已经尝试过每一个我能想到的方式,每次我都被这个错误拒绝。 我误解了这是如何工作或做错事的吗?

Azure DocumentDB – HTTP请求中找到的MAC签名与计算的签名不同

看似随机我无法从DocumentDB获取文档。 我可以调试,让它失败,下面的消息,然后再试一次,然后工作。 如果这与我的MAC地址有关,我也尝试从不同的工作站获得相同的结果。 Microsoft.Azure.Documents.UnauthorizedException,message:{“错误”:[“在HTTP请求中找到的MAC签名与计算的签名不同。服务器使用字符串后签名 – ‘post \ ndocs \ nmo1oanohoga = \ nwed ,25二月2015 12:35:57 gmt \ n \ n’“]} 我怎么去报道这个和b)试图弄清楚发生了什么?

DateTime,Epoch和DocumentDb

所以我读了这个非常有趣的博客,关于在Azure DocumentDb中使用datetime 。 问题是,目前,Azure DocumentDb不支持日期时间字段的范围搜索。 原因是DocumentDb基于json并且没有日期时间类型,因此通常将其放在xml日期时间格式的字符串中。 (显然Mongo没有那个问题,它的bson格式添加了datetime类型(以及其他)) 无论如何,该文章描述了在一个纪元(unix)时间内将日期时间存储在json中,基本上将日期时间存储为自01-01-1970以来的秒数。 时代的一个问题是它不考虑闰秒,但我现在可以忍受这一点。 我的问题是,我还希望以这种格式存储出生日期。 现在我可以将01-01-1900作为开始日期并将该日期以来的天数存储在int中。 虽然我很确定这会很好用,但感觉epoch是一个完善的概念,但生日的感觉就像我正在构建我自己的约定,这是我通常想要避免的。 有没有建立标准将日期存储标准化为一个数字? 哪个日期应该是基线日期?

如何在Documentdb中创建自动递增列

我想在azure documentdb中创建一个带有自动增量列的文档。 这可能吗? 如果是,请指导我。 任何帮助将不胜感激。 Database db = CreateOrReadDocumentDb(“EmployeeDb”).Result; DocumentCollection dc = CreateOrReadDocumentCollection(db.SelfLink, “EmployeeDetails”).Result; Employee emp = new Employee(); emp.Name=”ABC”; emp.id=””;//automatically generate a unique string emp.sal=10000; emp.exp =5; emp.index=0; // I want an auto increment column for emp with name index and want to store in azure document db client.CreateDocumentAsync(collectionLink, data);