我们有一个目前正在开发的项目,我们使用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) {
"_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它说好,但没有真正更新文档.我究竟做错了什么?
如何选择日期可读格式的文档时间脚本?我想做这样的事情:
SELECT CAST(C._ts AS DATE) FROM C
Run Code Online (Sandbox Code Playgroud)
请仅针对 Cosmos DB SQL 查询。
我将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,并以管理员身份运行它.
我该怎么做才能解决这个问题?
我有一个 cosmos 数据库实例,只有一个读取区域和写入区域。就我而言,Cosmos DB 提供的一致性保证意味着什么?
准确地说,我对文档执行了 write W 操作。我对同一个文档进行了 read R 操作。如果我选择了“最终一致性”,即使我只有一个读写区域,我是否有可能看到比 W 更早的写入?
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 也是一种替代方案。)
我正在使用 .NET CoreGraphQL和.NET Core 构建一个 Web API DocumentDb。
理论上,GraphQL优化数据通过网络传输,从而避免过度获取数据。但是我认识到后端服务器和数据库在查询数据库时正在做额外的不必要的工作(查询整个文档)。
这里最好的策略是使用Select()我们需要获取的特定属性。但我不知道如何从如此复杂的客户查询中构建表达式。
任何帮助真的很感激。
谢谢
我有一个 .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) DocumentDB Account Contributor我为函数应用程序创建了一个托管身份,并按照以下两个部分将其分配给
Microsoft.Azure.Services.AppAuthentication
当我尝试运行以下部分中的代码时出现异常:
无法加载文件或程序集“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
和下面的代码
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-cosmosdb ×10
azure ×6
c# ×3
.net-core ×2
json ×2
.net ×1
graphql ×1
javascript ×1
linq-to-sql ×1
mongodb ×1
sql ×1