标签: azure-cosmosdb

为什么DocumentDb在测试场景中运行时偶尔会失败

我们有一个目前正在开发的项目,我们使用Azure DocumentDb作为数据存储库.它一直很好,我真的很喜欢它如何工作以及它如何实现快速开发,但最近我们的集成测试已经开始失败.

每次测试运行时,我们的集成测试都会在数据库中创建和拆除集合.我想知道它的这个过程是否以某种方式"破坏"了数据库.

我已经将我们的项目剥离到了它的骨架并在这里检查了它:https://github.com/DamianStanger/DocumentDbDemo

当我运行测试时,我收到以下错误:

System.AggregateException : One or more errors occurred.
  ----> Microsoft.Azure.Documents.DocumentClientException : Message:  {"Errors":["Resource with specified id or name already exists"]}
ActivityId: e273b9d6-b571-43d3-9802-c7d7c819a3f0, Request URI: /apps/c9c8f510-0ca7-4702-aa6c-9c596d797367/services/507e2a70-c787-437c-9587-0ff4341bc265/partitions/ae4ca317-e883-4419-84f9-c8d053ffc73d/replicas/131159218637566393p
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at DocumentDbDemo.Data.AggregateRepository.CreateCollectionIfNotExists() in K:\_code\VisualStudio\DocumentDbPerfTests\DocumentDbDemo.Data\AggregateRepository.cs:line 32
   at DocumentDbDemo.Data.AggregateRepository..ctor(ConfigFactory configFactory) in K:\_code\VisualStudio\DocumentDbPerfTests\DocumentDbDemo.Data\AggregateRepository.cs:line 19
   at DocumentDbDemo.Data.Tests.AggregateRepositoryTests.ShouldReturnNullIfNotFound() in K:\_code\VisualStudio\DocumentDbPerfTests\DocumentDbDemo.Data.Tests\AggregateRepositoryTests.cs:line 24
--DocumentClientException
Run Code Online (Sandbox Code Playgroud)

AggregateRepository.cs_client.ReadDocumentCollectionAsync内的调用失败引起的.我不明白.代码中的异常是首先检查集合是否存在(它确实存在),然后如果不存在则会创建它.显然,创建将失败,因为集合存在!

第二种类型的失败是:

System.AggregateException : One or more errors occurred.
  ----> Microsoft.Azure.Documents.DocumentClientException : Message: {"Errors":["Owner resource does not exist"]} …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-cosmosdb

8
推荐指数
1
解决办法
1474
查看次数

(AZURE cosmosDB/mongoDB)更新数组中对象的特定元素的字段

{
    "_id" : ObjectId("59660d4099c1e682e0992ced"),
    "alpha" : [
        {
            "_id" : ObjectId("59660d4199c1e682e0992cee"),
            "number" : 1,
            "start_at" : ISODate("2017-07-12T11:51:28.895Z"),
            "end_at" : ISODate("2017-08-12T11:51:28.895Z"),
            "created_at" : ISODate("2017-07-12T11:51:29.346Z"),
            "updated_at" : null
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我有一个上面的文档,我想在'alpha'数组的JSON元素中更新或更改字段'number'和'updated_at'.

我试过这个:

db.mycol.update({_id: ObjectId("59660d4099c1e682e0992ced"), alpha: {$elemMatch: {_id: ObjectId("59660d4199c1e682e0992cee")}}}, {$set: {"alpha.$.number": 2, "alpha.$.updated_at": new Date()}})
Run Code Online (Sandbox Code Playgroud)

它适用于普通的mongodb服务器.但是使用azure cosmosdb/mongodb它说好,但没有真正更新文档.我究竟做错了什么?

javascript json azure mongodb azure-cosmosdb

8
推荐指数
1
解决办法
1698
查看次数

在 Azure CosmosDB SQL 查询中将 TimeScript 转换为日期

如何选择日期可读格式的文档时间脚本?我想做这样的事情:

SELECT CAST(C._ts AS DATE) FROM C
Run Code Online (Sandbox Code Playgroud)

请仅针对 Cosmos DB SQL 查询。

sql azure azure-cosmosdb

8
推荐指数
2
解决办法
2万
查看次数

Cosmos DB Emulator:无法获得优惠的授权标头

我将Azure Cosmos DB Emulator从版本1.22 升级到2.0.现在,当我转到本地数据资源管理器时,资源管理器选项卡中没有任何内容加载,我看到错误

无法获得商品的授权标头:{"readyState":4,"responseText":"{\"code \":\"InternalServerError \",\"message \":\"处理此请求时发生未知服务器错误.\r \nActivityId:48afdb03-e04b-4a5e-b568-e268c32eb10f,Microsoft.Azure.Documents.Common/2.0.0.0 \"}","responseJSON":{"code":"InternalServerError","message":"Unknown处理此请求时发生服务器错误.\ r \nActivityId:48afdb03-e04b-4a5e-b568-e268c32eb10f,Microsoft.Azure.Documents.Common/2.0.0.0"},"status":500,"statusText":"error" }

我尝试重新安装它,重新启动PC,并以管理员身份运行它.

我该怎么做才能解决这个问题?

.net azure .net-core azure-cosmosdb

8
推荐指数
1
解决办法
991
查看次数

Cosmos DB 在本地的一致性保证

我有一个 cosmos 数据库实例,只有一个读取区域和写入区域。就我而言,Cosmos DB 提供的一致性保证意味着什么?

准确地说,我对文档执行了 write W 操作。我对同一个文档进行了 read R 操作。如果我选择了“最终一致性”,即使我只有一个读写区域,我是否有可能看到比 W 更早的写入?

azure-cosmosdb

8
推荐指数
1
解决办法
559
查看次数

如何查询 CosmosDB 的嵌套对象值

order_id = 9234029m考虑到 CosmosDB 中的此文档,如何检索匹配的对象:

{
    "order": {
        "order_id": "9234029m",
        "order_name": "name",
    }
}

Run Code Online (Sandbox Code Playgroud)

我尝试在 CosmosDB 数据资源管理器中查询,但不可能order_id像这样简单地查询嵌套对象:

{
    "order": {
        "order_id": "9234029m",
        "order_name": "name",
    }
}

Run Code Online (Sandbox Code Playgroud)

(错误:“语法错误,‘订单’附近的语法不正确”)

这看起来应该是这么简单,但事实并非如此!(在 CosmosDB 数据资源管理器中,所有查询都需要以 开头SELECT * FROM c,但 REST SQL 也是一种替代方案。)

azure azure-cosmosdb azure-cosmosdb-sqlapi

8
推荐指数
1
解决办法
3858
查看次数

将 GraphQL 查询映射到 Select() linq 到 sql

我正在使用 .NET CoreGraphQL和.NET Core 构建一个 Web API DocumentDb

理论上,GraphQL优化数据通过网络传输,从而避免过度获取数据。但是我认识到后端服务器和数据库在查询数据库时正在做额外的不必要的工作(查询整个文档)。

这里最好的策略是使用Select()我们需要获取的特定属性。但我不知道如何从如此复杂的客户查询中构建表达式。

任何帮助真的很感激。

谢谢

c# linq-to-sql .net-core graphql azure-cosmosdb

8
推荐指数
1
解决办法
927
查看次数

Azure Cosmos DB (EF/Core) - 驼峰式大小写属性名称

我有一个 .NET Core 3.1 API 项目,其中通过实体框架(Microsoft.EntityFrameworkCore.Cosmos - v3.1.5)处理 Cosmos DB 存储。

我有一个数据库模型:

[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class BikeRental
{
    [JsonProperty(PropertyName = "id")]
    [Key]
    public Guid Id { get; set; }

    [JsonProperty(PropertyName = "bikeId")]
    public string BikeId { get; set; }

    [JsonProperty(PropertyName = "shopId")]
    public string ShopId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

保存到 CosmosDB 数据库后,将使用类属性名称对列进行序列化,忽略“PropertyName”属性。例如,如果“bikeId”更改为“testBikeId”,则仍写为“BikeId”。

{
    "Id": "192dfdf4-54cb-4290-a478-7035518983ca",
    "BikeId": "eb65b93b-17d3-4829-9729-d48c029211fe2",
    "ShopId": "636c08c4-600d-458a-98b7-8d312b8c18d2",

    "_rid": "2QZIAMVYbVQBAAAAAAAAAA==",
    "_self": "dbs/2QZIAA==/colls/2QZIAMVYbVQ=/docs/2QZIAMVYbVQBAAAAAAAAAA==/",
    "_etag": "\"00000000-0000-0000-4627-f721b0e701d6\"",
    "_attachments": "attachments/",
    "_ts": 1592564051
}
Run Code Online (Sandbox Code Playgroud)

任何有关如何解决此问题的帮助或建议将不胜感激!

编辑:将对象保存到 Cosmos 是通过以下方式执行的:

var response = _context.BikeRentals.Add(obj) …
Run Code Online (Sandbox Code Playgroud)

c# json entity-framework azure-cosmosdb

8
推荐指数
2
解决办法
3841
查看次数

了解 Azure Cosmos DB 免费套餐

Azure Cosmos DB 免费套餐为我们提供 1000 RU/s 和 25 GB 的存储空间。

我使用一个容器创建了一个数据库,向其中添加了一些数据并执行了一些查询。看看这些见解,我可以看到: 见解

这是否意味着我使用了免费套餐 1000 个 RU 中的 99.68 个 RU?一个月有 1000 RU 吗?

azure-cosmosdb

8
推荐指数
1
解决办法
3203
查看次数

使用本地和 Azure 上的 Azure Function App 中的托管标识连接 Azure CosmosDB

DocumentDB Account Contributor我为函数应用程序创建了一个托管身份,并按照以下两个部分将其分配给

https://learn.microsoft.com/en-us/azure/cosmos-db/management-identity-based-authentication#assign-a-system-assigned-management-identity-to-a-function-app

https://learn.microsoft.com/en-us/azure/cosmos-db/management-identity-based-authentication#grant-access-to-your-azure-cosmos-account

Microsoft.Azure.Services.AppAuthentication

当我尝试运行以下部分中的代码时出现异常:

https://learn.microsoft.com/en-us/azure/cosmos-db/management-identity-based-authentication#programmatically-access-the-azure-cosmos-db-keys

无法加载文件或程序集“System.Text.Encodings.Web,Version=6.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”。该系统找不到指定的文件。在 System.Text.Json.Serialization.Metadata.JsonPropertyInfo.DeterminePropertyName() 在 System.Text.Json.Serialization.Metadata.JsonPropertyInfo.GetPolicies(Nullable 1 ignoreCondition, Nullable1 declaringTypeNumberHandling) 在 ... System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)位于 C:.ME\MyLab.Code\AzureCode\CosmosDB\azure-cosmos-dotnet- 中的 Cosmos.Samples.AzureFunctions.AzureFunctionsCosmosClientMI.d__7.MoveNext() 处的 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() v3-usage\AzureFunctions\AzureFunctionsCosmosClientMI.cs:第 85 行

Azure.身份

由于AppAuthenticationMS 不推荐,因此我Azure.Identity通过以下链接转而使用: https://learn.microsoft.com/en-us/dotnet/api/overview/azure/identity-readme ?view=azure-dotnet

https://joonasaijala.com/2021/07/01/how-to-using-management-identities-to-access-cosmos-db-data-via-rbac-and-disabling-authentication-via-keys/

和下面的代码

 static string cosmosUrl = "https://xxx.documents.azure.com:443/";
    private static CosmosClient client = new CosmosClient(cosmosUrl, new DefaultAzureCredential());
   var container = client.GetContainer("FamilyDatabase", "FamilyContainer");
        try
        {
            var result = await container.CreateItemAsync<Item>(data, new PartitionKey(data.LastName));
            return new OkObjectResult(result.Resource.Id);
        }
        catch (CosmosException cosmosException)
        {
            log.LogError("Creating item failed with …
Run Code Online (Sandbox Code Playgroud)

azure azure-functions azure-cosmosdb azure-managed-identity

8
推荐指数
1
解决办法
6448
查看次数